Probleme de classe

Signaler
Messages postés
163
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
1 novembre 2006
-
Messages postés
163
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
1 novembre 2006
-
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

Messages postés
163
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
1 novembre 2006

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
 
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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).
Messages postés
163
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
1 novembre 2006

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);
  
 }




 
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
163
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
1 novembre 2006

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é ?

 
Messages postés
163
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
1 novembre 2006

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 ....