Probleme de classe

nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006 - 30 sept. 2006 à 19:49
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006 - 1 oct. 2006 à 16:33
Bonjour,
J ai recupéré une classe d abstracation pour MySql cela fonctionne. Elle s instencie de cette facon :
try {
        $db = dbInterface::GetInstance('mysql', 'mysql');
    } catch ( Exception $e ) {
        die ( $e->getmessage() );
    }

Maintenant j'ai créé une classe Utilisateur:

@include ("../include/database.php");
@include ("../include/mysql.php"); 

    //Instanciation de la connexion
    try {
        $db = dbInterface::GetInstance('mysql', 'mysql');
    } catch ( Exception $e ) {
        die ( $e->getmessage() );
    }

class Utilisateur {

    //public $db;
    public $nom;
    public $prenom;
    public $login;
    public $mdp;
   
    function __tostring(){
        return "Classe utilisateur";
    }
   
    function __construct($login="", $mdp="",$nom="", $prenom=""){
   
        //$this->db = dbInterface::GetInstance('mysql', 'mysql');
 
        $this->nom = $nom;
        $this->prenom = $prenom;
        $this->login = $login;
        $this->mdp = $mdp;
       
    }

    function already_exist(){
   
        if(($this->login !="")&&($this->mdp !="")) {
            try{                $requete "SELECT `login`,`pwd` FROM `utilisateur` WHERE `login` "$this->login" AND `pwd` = "$this->mdp"";
                $db->query($requete);
                $ligne = $db->num_rows($requete);   
                if ($data = $db->fetch_row($requete)){
                    return true;
                }   
                else return false;
           
            }catch ( db_exception $e ) {
                $e->die_on_error();
            }
        }
    }
   
}
En faisant ainsi le naviguateur ne m affiche plus rien... :(
J'ai egalement essayer de creer un attribut $db dans la classe Utilisateur comme ecrit en commentaire mais ca ne marche pas non plus.
QQ'un peut il m aider merci ;)

 

6 réponses

nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
30 sept. 2006 à 20:23
Re,
qd je créé un attribut db dans la classe Utilisateur il m affiche comme erreur :
Fatal error: Class 'dbInterface' not found in D:\xampp\xampp\htdocs\class\utilisateur.php on line 26
Besoin d informations complementaires ?
Merci
 
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 oct. 2006 à 00:19
hello,

tu essayes de faire quoi ? Utilise la classe d'abstraction dans une de tes classes, c'est ça ? (ce serait pas la mienne, par hasard, au passage...? Me rappelle quelquechose c'te classe lol).
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
1 oct. 2006 à 00:30
La classe d'abstraction c celle de FhX  récupéré sur code-source : http://www.phpcs.com/codes/PHP5-COUCHE-ABSTRACTION-SGBD_35488.aspx
La j'ai reussi a faire ce que je voulais mais je ne suis pas sur que ca soit la bonne méthode.

Je créé un utilisateur comme ceci

function __construct($login="", $db="", $mdp="",$nom="", $prenom=""){


  $this->db = $db;
  $this->nom = $nom;
  $this->prenom = $prenom;
  $this->login = $login;
  $this->mdp = $mdp;
  
 }

Je lui passe donc en parametre lors de sa construction un objet de type database interface que j instencie sur chaque page de cette maniere

try {
  $db = dbInterface::GetInstance('mysql', 'mysql');
 } catch ( Exception $e ) {
  die ( $e->getmessage() );
 }

Ce que je veux faire c'est utiliser cette couche d abstraction afin de pouvoir ecrir des methodes dans la classe Utilisateur du genre :

// Fonction de remplissage total
 function select(){
   $requete "SELECT `login`,`pwd`, `nom`,`prenom` FROM `utilisateur` WHERE `login` "$this->login"";
  $this->db->query($requete);
  $data = $this->db->fetch_row($query);
  $this->mdp = $data[1];
  $this->nom = $data[2];
  $this->prenom = $data[3];
 
 }
 
 function insert($login, $mdp, $nom, $prenom){
 
  $requete = "INSERT INTO `utilisateur` (`nom`,`prenom`,`login`,`pwd`) VALUES("$nom","$prenom","$login","$mdp")";
  $this->db->query($requete);
  
 }




 
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 oct. 2006 à 09:29
ah, le GetInstance m'a trompé ;-)

Etends, plutôt, la classe DB dans la classe que tu veux développer.
Quoi que, avec le singleton, ça peut être problématique...
Sinon, oui, tu peux faire ce que tu as fait : passer l'objet DB en paramètre, et l'utiliser comme une propriété de ta classe.
par contre... : $db '' ? null à la limite, et encore...cet objet est requis, pour que ta classe fonctionne. Donc, il ne doit pas être facultatif dans la construction de ta 2de classe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
1 oct. 2006 à 16:29
Ok merci bien. Je vais donc continuer comme ca. Ca m'intrigue juste d avoir a instancier le singleton sur chacune de mes pages... Est il possible de le mettre en Session ? Cela est-il risqué ?

 
0
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
1 oct. 2006 à 16:33
J'ai oublié qqch. En fait ce que je ne comprend pas c'est que je ne puisse pas faire
try {
  $db = dbInterface::GetInstance('mysql', 'mysql');
 } catch ( Exception $e ) {
  die ( $e->getmessage() );
 }
Dans le constructeur de mon objet en rajoutant :
@include ("../include/database.php");
@include ("../include/mysql.php"); 
au début ....

 
0
Rejoignez-nous