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 :

Fonction Protected utilisée dans une autre classe


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut Fonction Protected utilisée dans une autre classe
    Bonjour,

    J'ai créé une classe héritée de PDO dans laquelle j'ai implémenté deux fonctions "protected". Or, quand je les appelle d'une autre classe elles marchent sans aucun problème ce qui est contraire au principe des fonctions protected. (Normalement, elle ne sont joignable que depuis leur propre classe ou leurs classes filles) Donc, je me demandais si c'était dû au fait que ma classe est héritée de PDO ou pour une autre raison que j'ignore.

    Merci.

    PS : voilà le code des deux classe

    Code php : 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
    class MyPDO extends PDO {
     
        public function __construct($dsn,$user,$password) // constructeur
        {
            parent::__construct($dsn ,$user,$password);
     
            $this->setattribute(self::ATTR_ERRMODE,self::ERRMODE_EXCEPTION); //activation de la gestion d'erreur par exception
     
        }
     
     
     
        protected function My_Select($columns , $tables , $criterion)
        {
            if($criterion == '')
            {
                $req = 'select '.$columns.' from '.$tables;
            }
     
            else
            {
                $req = 'select '.$columns.' from '.$tables.' where '.$criterion;  //requête à passer
            }
     
     
            $tmp = $this->prepare($req);  //préparation
     
            $tmp->setfetchmode(self::FETCH_ASSOC);  //récupération sous forme de tableau associatif
     
            $tmp->execute();  //éxecution
     
            $res = $tmp->fetchAll(); //récupération
     
            return($res);
     
        }
     
     
     
        protected function My_Insert($table , $columns , $values)
        {
           $req ='insert into '.(string)$table.' ('.(string)$columns.') values ('.(string)$values.')';
     
           $tmp = $this->prepare($req);
     
           return($tmp->execute());
        }
    }
     
     
     
    class Administrateur
    {
        protected $login; //l'administrateur est défini par son login
     
        public function _construct($x) //constructeur
        {
            $this->login = $x;
     
        }
     
        public function authentification($log,$pass) //pour vérifier si l'utilisateur est bel et bien un administrateur
        {
            $log = '"'.$log.'"';  //pour ajouter les guillemets
     
            $db_admins = new MyPdo('mysql:dbname=admins;host=localhost', 'root', '');  //connexion à la base administrateur
     
            $aut=false; //variable retour indiquant l'authenticité
     
            $select_login_password = $bd_admins->My_Select('login, password', 'admin', 'login = '.(string)$log); //requête pour extraire les logins et mots de passe correspondant au login entré
     
            if (!empty($select_login_password)) //s'il y a un login correspondant
            {
                while(($aut == false) and (list($x,$y)= each($select_login_password)))
                {
                    if($y['password'] == $pass) //si le mot de passe correspond
                    {
                        $aut = true;
                    }
                }
            }
     
            $db_admins = null; //fermeture de la base
     
            return ($aut);
        }
     
     
     
         function consulter_produits($tab = null ) //voir les produits qui répondent à ceratins critères
        {
            $criterion = ''; //initialisation des critères
     
            $db_prod = new MyPDO('mysql:host=localhost;dbname=produits','root',''); //connexion à la base des produits
     
            if($tab == null) //si on n'a aucun critère on affiche tout
            {
                $prd = $db_prod->My_Select('*','produit','');            
            }
     
            else
            {
                foreach($tab as $ind => $par) //parcours du tableau des paramètres et construction du critère
                {
                    if($par==null)
                    {
                        $criterion = $criterion;
                    }
                    else
                    {
                        $criterion = $criterion.$ind.' = '.$par.' and ';
                    }
                }
     
                $criterion = $criterion.' 1';
     
                $prd = $db_prod->My_Select('*','produit',$criterion); //séléction
            }
     
            $db_prod = null; //fermeture de la base
     
            return($prd);
        }
     
        public function ajouter_produit($table,$tab)
        {
            $values = '';
     
            $columns = '';
     
            foreach($tab as $ind => $par)
            {
                if($par != null)
                {
                    $columns = $columns.$ind.' , ';
                }
            }
        }
    }

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    hmm tes classes sont toutes des extend de PDO ? si c'est le cas, vu qu'elles ont toutes le même routes, tu peux appeler n'importe quelle méthode depuis n'importe quelle classe depuis PHP 5.2 il me semble

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    En fait, je ne crois pas car la classe administrateur n'est pas une extension de PDO et j'ai même essayé le truc dans une autre classe test (elle ne fait qu'instancier MyPDO et appeler ses méthodes et afficher le résultat) et ça marche quand même.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Les éléments déclarés publics (public) peuvent être utilisés par n'importe quelle partie du programme. L'accès aux éléments protégés (protected) est limité aux classes et parents hérités (et à la classe qui a défini l'élément). L'accès aux éléments privés (private) est uniquement réservé à la classe qui les a définis.
    Je pense que ce que tu cherches c'est une méthode private et non protected.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ne serais-tu pas en php4 ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Non. c'est bel et bien PHP5.

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    J'ai peut-être un truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $db_admins = new MyPdo('mysql:dbname=admins;host=localhost', 'root', '');  //connexion à la base administrateur
     
            $aut=false; //variable retour indiquant l'authenticité
     
            $select_login_password = $bd_admins->My_Select('login, password', 'admin', 'login = '.(string)$log); //requête pour extraire les logins et mots de passe correspondant au login entré
    Voyez-vous une différence ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  8. #8
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Sinon, je ne comprends pas.
    J'ai fais ce test en réduisant votre code pour test, mais en gardant le coeur du problè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
    ?php
    class MyPDO extends PDO {
     
        protected function My_Select($msg)
        {
            echo $msg;
            return true;
        }
     
     
     
    }
     
     
     
    class Administrateur
    {
        protected $login; //l'administrateur est défini par son login
     
        public function _construct($x) //constructeur
        {
            $this->login = $x;
        }
     
        public function authentification()
        {
            $db_admins = new MyPdo('sqlite:D:\apache\htdocs\bdd.db3');
            $select_login_password = $db_admins->My_Select($msg);
            return true;
        }
     
     
     
    }
     
    $myAdmin = new Administrateur('snafu');
    $myAdmin->authentification();
    Et j'ai bien un message d'erreur à propos de protected...
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Votre remarque me mets peut être sur une piste. Avant ce code, j'avais une version où le constructeur de MyPDO comportait une erreur (un seul tiret bas au lieu de 2 dans le nom) et là ça m'afficher une erreur même si je le construisais à partir du constructeur de PDO. Et là je vois que vous avez enlevé le constructeur. C'est peut être ça?

  10. #10
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par s.n.a.f.u Voir le message
    J'ai peut-être un truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $db_admins = new MyPdo('mysql:dbname=admins;host=localhost', 'root', '');  //connexion à la base administrateur
     
            $aut=false; //variable retour indiquant l'authenticité
     
            $select_login_password = $bd_admins->My_Select('login, password', 'admin', 'login = '.(string)$log); //requête pour extraire les logins et mots de passe correspondant au login entré
    Voyez-vous une différence ?
    Franchement, je ne vois pas de différence!

  11. #11
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par dinguedemoi Voir le message
    Franchement, je ne vois pas de différence!
    Il vous a indiqué en gras dans le message la différence, la variable n'a pas le meme nom parce que vous avez inséré les lettres B et D dans le nom

  12. #12
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Ah! Oui! Je vois mais même après avoir corriger le truc ça marche encore! Mais bon! Je vais remettre tout le code après correction (il a subit plusieur modification mais le truc persiste)



    Code php : 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
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
     
    //Classe MyPDO
    <?php
     
    /**
     * Class MyPDO. Comes to regroup some PDO treatments
     *
     * @author BH
     * 
     */
     
     
    class MyPDO extends PDO {
     
        public function __construct($dsn,$user,$password) // constructeur
        {
            parent::__construct($dsn ,$user,$password);
     
            $this->setattribute(self::ATTR_ERRMODE,self::ERRMODE_EXCEPTION); //activation de la gestion d'erreur par exception
     
        }
     
        public function __destruct() //destructeur
        {
     
        }
     
     
     
        public function __set($at,$val) //mutateur
        {
            $this->$at = $val;
        }
     
     
     
        public function __get($at) //accesseur
        {
            return($this->$at);
        }
     
     
     
        protected function My_Select($columns , $tables , $criterion)
        {
            if($criterion == '')
            {
                $req = 'select '.$columns.' from '.$tables;
            }
     
            else
            {
                $req = 'select '.$columns.' from '.$tables.' where '.$criterion;  //requête à passer
            }
     
     
            $tmp = $this->prepare($req);  //préparation
     
            $tmp->setfetchmode(self::FETCH_ASSOC);  //récupération sous forme de tableau associatif
     
            $tmp->execute();  //éxecution
     
            $res = $tmp->fetchAll(); //récupération
     
            return($res);
     
        }
     
     
     
        protected function My_Insert($table , $columns , $values) //pour insérer une nouvelle ligne dans la table $table
        {
           $req ='insert into '.(string)$table.' ('.(string)$columns.') values ('.(string)$values.')';
     
           $tmp = $this->prepare($req);
     
           return($tmp->execute());
        }
     
        protected function My_Update($table , $update, $criterion) //pour mettre à jour les lignes de la table $table répondant aux critères $criterion
        {
            $req = 'update '.(string)$table.' set '.$update.' where '.$criterion; //construction de la requête
     
            $tmp = $this->prepare($req); //préparation
     
            return($tmp->execute()); //éxecution
        }
     
     
     
        protected function My_Delete($table , $criterion) //supprime les lignes qui répondent aux critères $criterion dans la table $table
        {
            $req = 'delete from '.$table.' where '.$criterion; //construction de la requête
     
            $tmp = $this->prepare($req); //préparation
     
            return($tmp->execute()); //éxecution
        }
    }
    ?>
     
     
    //Classe Administrateur
     
     
     
    <?php
     
    /**
     * Class Administrateur. Comes to manage data bases
     *
     * @author BH
     *
     */
    require_once('MyPDO.php');
    class Administrateur
    {
        protected $login; //l'administrateur est défini par son login
     
        public function __construct($x) //constructeur
        {
            $this->login = $x;
     
        }
     
     
     
        public function __destruct() //destructeur
        {
     
        }
     
     
     
        public function __set($at,$val) //mutateur
        {
            $this->$at = $val;
        }
     
     
     
        public function __get($at) //accesseur
        {
            return($this->$at);
        }
     
     
     
        public function authentification($log,$pass) //pour vérifier si l'utilisateur est bel et bien un administrateur
        {
            $log = '"'.$log.'"';  //pour ajouter les guillemets
     
            $db_admins = new MyPdo('mysql:dbname=admins;host=localhost', 'root', '');  //connexion à la base administrateur
     
            $aut=false; //variable retour indiquant l'authenticité
     
            $select_login_password = $db_admins->My_Select('login, password', 'admin', 'login = '.(string)$log); //requête pour extraire les logins et mots de passe correspondant au login entré
     
            if (!empty($select_login_password)) //s'il y a un login correspondant
            {
                while(($aut == false) and (list($x,$y)= each($select_login_password)))
                {
                    if($y['password'] == $pass) //si le mot de passe correspond
                    {
                        $aut = true;
     
                        echo 'ça a marché!';
                    }
     
                    else
                    {
                        echo 'ça n a pas marché!';
                    }
                }
            }
     
            $db_admins = null; //fermeture de la base
     
            return ($aut);
        }
     
     
     
         function consulter($db,$table,$tab = null ) //voir les élèments d'une table $table de la base $db qui répondent à ceratins critères
        {
            $criterion = ''; //initialisation des critères
     
            $db_use = new MyPDO('mysql:host=localhost;dbname='.$db,'root',''); //connexion à la base $db
     
            if($tab == null) //si on n'a aucun critère on affiche tout
            {
                $prd = $db_use->My_Select('*',$table,'');
            }
     
            else
            {
                foreach($tab as $ind => $par) //parcours du tableau des paramètres et construction du critère
                {
                    if($par==null)
                    {
                        $criterion = $criterion;
                    }
                    else
                    {
                        $criterion = $criterion.$ind.' = "'.$par.'" and '; //construction du critère
                    }
                }
     
                $criterion = $criterion.' 1'; //pour palier au dernier and
     
                $prd = $db_use->My_Select('*',$table,$criterion); //séléction
            }
     
            $db_use = null; //fermeture de la base
     
            return($prd);
        }
     
        public function ajouter($db,$table,$tab) // permet d'ajouter une nouvelle entrée dans une table $table de la base $tab
        {
            $db_use = new MyPDO('mysql:host=localhost;dbname='.$db,'root',''); //connexion à la base des produits
     
            $values = ''; //initialisation des valeurs
     
            $columns = ''; //initialisation des colonnes
     
            foreach($tab as $ind => $par)
            {
     
                if($par != null)
                {
     
                    $columns = $columns.$ind.'" , "'; //regroupement des noms des colonnes dans une chaîne de caractère
     
                    $values = $values.$par.'" , "';  //regroupement des noms des valeurs dans une chaîne de caractère
     
                }
            }
     
            $columns = substr($columns,0,strlen($columns)-3); //pour enelever la dernière virgule
     
            $values = substr($values,0,strlen($values)-3);
     
            $res = $db_use->My_Insert($table,$columns,$values); //insertion
     
            $db_use = null; //fermeture de la base
     
            return($res);
     
     
        }
     
     
     
        public function modifier($db,$table,$tab_upd,$tab_crit) //pour modifier ceratines colonnes de certaines lignes de la table $table dans la base $db
        {
            $update = ''; //initialisation des mises à jour
     
            $criterion = ''; //initialisation des critères
     
            $db_use = new MyPDO('mysql:host=localhost;dbname='.$db,'root',''); //connexion à la base $db
     
            foreach($tab_upd as $ind => $par) // construction de la chaîne des mises à jour
            {
                if($par==null)
                {
                    $update = $update;
                }
     
                else
                {
                    $update = $update.$ind.' = "'.$par.'" , ';
                }
            }
     
            foreach($tab_crit as $ind => $par)  //construction des critères
            {
                if($par==null)
                {
                    $criterion = $criterion;
                }
     
                else
                {
                    $criterion = $criterion.$ind.' = "'.$par.'" and ';
                }
     
            }
     
            $update = substr($update,0,strlen($update)-3); //pour enlever la dernière virgule
     
            $criterion = $criterion.' 1 '; //pour valider le dernier and
     
            $res = $db_use->My_Update($table , $update , $criterion); //mise à jour
     
            $db_use = null; //fermeture de la base
     
            return($res);
     
        }
     
     
     
        public function supprimer($db , $table , $tab_crit) //supprime une(des) ligne(s) de la table $table de la base $db
        {
            $criterion = ''; //initialisation des critères
     
            $db_use = new MyPDO('mysql:host=localhost;dbname='.$db,'root',''); //connexion à la base $db
     
            foreach($tab_crit as $ind => $param) //construction du critère
            {
                $criterion = $ind.' = "'.$param.'" and ';
            }
     
            $criterion = $criterion.' 1'; //pour palier au dernier 1
     
            $res = $db_use->My_Delete($table , $criterion); //suppression
     
            $db_use = null; //fermeture de la base
     
            return($res);
        }
    }
     
    ?>
     
     
    //Classe test
    [code = php]
    <?php
     
    require_once('Administrateur.php');
     
    $ad = new Administrateur('chiheb');
     
    $var = $ad->authentification('chiheb', 'sowsnow');
     
    echo $var;

  13. #13
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    C'est étrange ! (un bug ?)

    Puisqu'on en est à faire des trucs interdits, qu'est-ce que ça donne si tu passes la méthode incriminée de "protected" à "private" ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  14. #14
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    J'ai mis les trucs en private mais ça marche quand même. Et puisque le truc est tellement bizarre j'ai essayé des trucs bizarres du genres essayer le script sur un autre ordinateur, changer l'arborescence de mon projet, utiliser MyPDO dans d'autres classes etc... et ça marche à tous les coups. Je crois qu'il est bon de préciser que je travaille sous wamp 2.0 et que pour éditer mes fichiers j'utilise NetBeans 6.5.1. (au point où on en est le moindre renseignement pourrait être utile)

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,

    Peux tu ouvrir ton phpinfo ( sa doit être sur la page d'accueil de wamp) et nous donner la version précise stp ==> php 5.x.x

    Autrement, tu n'as pas le code cette classe dupliquée dans un autre fichier ?

    Peux tu lancer une exception depuis MyPDO::MySelect et enregistrer la trace pour l'afficher ici stp ?
    ACO, cf exemple officiel de http://www.php.net/manual/fr/class.errorexception.php

    Enfin, peux tu implémenter http://php.net/__call et voit si l'on peut tracer les appels (mais là j'ai moins de certitudes quand à l'interet) .

    merci pour tes infos,
    a plus

  16. #16
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Pour la version de PHP c'est la 5.2.9-2.
    Le code de cette classe se trouve seulement dans le fichier MyPDO.php lui même se trouvant sous c:\wamp\www\monprojet.

    Pour les exceptions voilà ce que j'ai fait: j'ai rajouté une ligne
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    throw new Exeception('Constructeur!'); // au constructeur de MyPDO
     
    throw new Exception('My_Select'); //méthode My_Select

    Puis dans la classe test.php qui instancie MyPDO et appelle My_Select j'ai mis:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try
    {
    $db = new MyPDO('mysql:host=localhost;dbname=admins','root','');
     
    $res = $db->My_Select('login','admin','');
    }
    catch(Execption $e)
    {
        echo $e->getTraceAsString();
    }

    et voilà le message affiché:

    Fatal error: Uncaught exception 'Exception' with message 'Constructeur!' in C:\wamp\www\ElectroDiscount\MyPDO.php:19 Stack trace: #0 C:\wamp\www\ElectroDiscount\test.php(12): MyPDO->__construct('mysql:host=loca...', 'root', '') #1 {main} thrown in C:\wamp\www\ElectroDiscount\MyPDO.php on line 19
    j'ai aussi ajouté ce bout de code à MyPDO (mais je ne suis pas sûre si c'est correctement fait):
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function __call($name, $arguments) {
            // Note : la valeur de $name est sensible à la casse.
            echo "Appel de la méthode '$name' "
                 . implode(', ', $arguments). "\n";
        }

    Mais, ça ne change rien; j'ai le même message d'erreur.

    Et même si je fait une exception juste dans My_Select (et pas dans le constructeur) j'ai le même genre d'erreur (just le message de l'exception change).

    PS: Merci pour votre aide kaymak

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Citation Envoyé par dinguedemoi Voir le message
    Pour la version de PHP c'est la 5.2.9-2.
    Le code de cette classe se trouve seulement dans le fichier MyPDO.php lui même se trouvant sous c:\wamp\www\monprojet.

    Pour les exceptions voilà ce que j'ai fait: j'ai rajouté une ligne
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    throw new Exeception('Constructeur!'); // au constructeur de MyPDO
     
    throw new Exception('My_Select'); //méthode My_Select

    Puis dans la classe test.php qui instancie MyPDO et appelle My_Select j'ai mis:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try
    {
    $db = new MyPDO('mysql:host=localhost;dbname=admins','root','');
     
    $res = $db->My_Select('login','admin','');
    }
    catch(Execption $e)
    {
        echo $e->getTraceAsString();
    }

    et voilà le message affiché:

    Fatal error: Uncaught exception 'Exception' with message 'Constructeur!' in C:\wamp\www\ElectroDiscount\MyPDO.php:19 Stack trace: #0 C:\wamp\www\ElectroDiscount\test.php(12): MyPDO->__construct('mysql:host=loca...', 'root', '') #1 {main} thrown in C:\wamp\www\ElectroDiscount\MyPDO.php on line 19

    j'ai aussi ajouté ce bout de code à MyPDO (mais je ne suis pas sûre si c'est correctement fait):
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function __call($name, $arguments) {
            // Note : la valeur de $name est sensible à la casse.
            echo "Appel de la méthode '$name' "
                 . implode(', ', $arguments). "\n";
        }

    Mais, ça ne change rien; j'ai le même message d'erreur.

    Et même si je fait une exception juste dans My_Select (et pas dans le constructeur) j'ai le même genre d'erreur (just le message de l'exception change).

    PS: Merci pour votre aide kaymak
    salut,

    peux tu virer ton exception du constructeur, pour ne la mettre que dans l'appel de MySelect stp (c'est bien celui ci qui est étrange) ?
    Et reposter l'info ?
    Peux tu préciser ton os par ailleurs stp.

    merci

  18. #18
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Bon. J'ai enlevé l'exception du constructeur et je ne l'ai laissée que dans My_Select. Voilà le résultat:

    Fatal error: Uncaught exception 'Exception' with message 'My_Select' in C:\wamp\www\ElectroDiscount\MyPDO.php:63 Stack trace: #0 C:\wamp\www\ElectroDiscount\Administrateur.php(51): MyPDO->My_Select('login, password', 'admin', 'login = "chiheb...') #1 C:\wamp\www\ElectroDiscount\test.php(9): Administrateur->authentification('chiheb', 'snowsnow') #2 {main} thrown in C:\wamp\www\ElectroDiscount\MyPDO.php on line 63
    En fait, ce n'est pas seulement My_Select qui se comporte bizarrement ; j'ai des méthodes My_Insert, My_Delete et My_Update (qui marchent toutes sur le même principe) qui se comportent de la même façon que My_Select.

    Mon OS est Windows Vista édition familiale Service Pack 2.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/10/2012, 17h21
  2. Réponses: 2
    Dernier message: 29/08/2007, 19h43
  3. Réponses: 2
    Dernier message: 22/12/2006, 11h35
  4. Réponses: 6
    Dernier message: 12/11/2006, 16h46
  5. Probleme d'apel de fonction dans une autre classe
    Par freecell31 dans le forum MFC
    Réponses: 24
    Dernier message: 13/05/2006, 11h34

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