begin process at 2012 05 28 21:53:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Gestion d'un user


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Gestion d'un user

jeudi 17 avril 2008 à 21:38:54 | Gestion d'un user

atchoumen

Bonjour,

J'ai récupere la class de connection sur php.fr http://fr.php.net/manual/fr/language.oop5.magic.php. La connection est nickel et je peux faire des requetes.
Je souhaiterais maintenant créer une nouvelle classe utilisateur dans laquelle je pourrais effectuer des requetes. Ainsi en appelant des fonctions je serais capable de me retourner un boolean pour savoir par exemple si mon user existe dans la base de donnée.

Le hic c'est que je n'arrive pas a faire la liaison entre ma class user et connection.
Si quelqu'un à une idée ou pouvait m'orienter ca serait vraiment génial.

Merci
jeudi 17 avril 2008 à 21:57:14 | Re : Gestion d'un user

neigedhiver

Salut,

Je ne comprends pas bien ce que tu veux faire comme lien exactement ?
Utiliser une classe dans l'autre ?
Si c'est ça, tu peux simplement passer l'instance d'une classe en paramètre au constructeur de la seconde.
Sinon, tu peux utiliser la méthode crados qui consiste à faire appel aux globals. Mais c'est vraiment crade.
Sinon, le plus propre, c'est que ta classe connexion (puisque c'est elle, je suppose, que tu souhaite utiliser dans ta class user) soit un singleton, ou un multiton : elle serait alors appelée via une méthode statique, donc utilisable de partout.
Exemple :

class oUser {
    private $oDB;
    public function __construct() {
       $this -> oDB = DB::getInstance();
    }
}


Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
jeudi 17 avril 2008 à 22:14:24 | Re : Gestion d'un user

atchoumen

Salut,

Oui en faite, je voudrais pouvoir créer une fonction dans ma class user qui permet d'aller vérifier l'existance de mon abonnée dans ma base.
Pour l'instant je suis en fase de test est voici ce que j'ai fait

Page contenant ma class user (ma class connection est copié coller de php.net)
class useraccount extends connection{
    protected $identifiant;
    protected $motdepasse; 

    public        function __construct($identifiant,$motdepasse){
        $this->identifiant = $identifiant;
        $this->motdepasse = $motdepasse;
    }
   
    public function login() {
        echo "LOGIN : " . $this->identifiant . " - MDP : " . $this->motdepasse;
    }
}

Dans ma page de test, j'ai le code suivant

$user = new useraccount($_REQUEST['identifiant'],$_REQUEST['motdepasse']);
$user->login();
Cela me renvoi bien les bonnes info saisie dans mon formulaire. (LOGIN: toto - MDP: tata)
Parallelement, j'ai déclaré une nouvelle class connection
$sql = $conn->requete("SELECT * FROM users_account WHERE username='".$_REQUEST['identifiant']."'");
$val = mysql_fetch_object($sql);
echo "rep requete : ".$val->id;
Cela fonctionne aussi et me renvoi bien l'identifiant (1)

Je voudrais donc faire un mélange des deux, mais par contre meme à partir de ton exemple je ne vois pas comment faire !
Pourrais tu me réorienter à partir de ce que j'ai fait ?
Merci pour ton aide


jeudi 17 avril 2008 à 22:49:46 | Re : Gestion d'un user

neigedhiver

Réponse acceptée !
Je ne peux pas te réorienter à partir de ce que tu as fait... T'as pas pris la bonne route. Fais demi-tour, et prends à gauche.

Plus sérieusement, le fait que ta classe user étende ta classe connexion, ça me chagrine quelque peu.
Ce sont deux choses différentes qui n'ont rien à voir : la classe connexion sert à gérer l'accès au serveur de base de données. La classe user sert (doit servir) à connecter un membre, à gérer sa session, gérer ses préférences, des trucs comme ça.
En gros, ce sont deux machines différentes qui n'ont rien à voir, si ce n'est que l'une a besoin de l'autre. Mais cela n'implique pas pour autant qu'il faille qu'elle se colle dessus.

Si une classe doit étendre la classe connexion, il faut que ce soit pour faire le même genre de travail : accéder à un serveur de base de données (un autre, ou un avec des caractéristiques bien particulières, ou un d'un autre genre, comme pgSql, etc).

Bon reprenons au début.

La classe connexion présentée dans la doc de PHP n'est là qu'à titre d'illustration. Elle n'est pas complète et ne sert à peu près à rien en l'état. Elle ne fait rien si ce n'est se connecter à la base de données... La belle affaire ! Une fonction fait la même chose en 2 lignes.
D'ailleurs, si elle s'appelle connexion, c'est qu'elle ne sert qu'à illustrer le fonctionnement des méthodes magiques __sleep() et __wakeup() au traver du processus de connexion à un serveur de données.
Pour bien faire, il faudrait qu'elle te permette de gérer l'exécution des requêtes, les erreurs (affichées, exceptions, logguées, etc), permettre la manipulation de résultats en fournissant par exemple un itérateur, etc.

Bon ceci étant posé, je te donne un début de classe exemple, qui est un singleton. Un singleton est une classe que l'on ne peut instancier qu'une seule fois.

class DB_single {
    private $instance;
    public static function getInstance($host, $user, $password, $dbname) {
       if (!isset(self::$instance)) {
          self::$instance = new DB_single($host, $user, $password, $dbname);
      }
       return self::$instance;
    }
   
    protected function __construct() {
       mysql_connect($host, $user, $password, $dbname);
    }
}

Pour instancier la classe :

$DB = DB_single::getInstance('host', 'user', 'pasword', 'dbname');

Cette classe fait la même chose que la classe en question de la doc PHP, hormis le fait que si je linéarise $DB et que je le délinéarise, elle ne restaure pas la connexion.
Sinon, elle t'apporte exactement la même chose en terme de fonctionnalités.
A une différence près : en PHP5, puisque les objets sont TOUJOURS passés par référence (ce n'est pas une copie de l'objet qui est passée en argument, mais un pointeur vers l'objet, qui n'existe donc qu'en un seul exemplaire dans la mémoire de PHP), je peux tout à fait utiliser $DB depuis n'importe quel endroit dans mon script. Y compris depuis une fonction.

La méthode statique getInstance() se charge de renvoyer un pointeur vers le seul objet DB_single existant dans PHP, qui est stocké dans la variable statique $instance. (lire la doc sur les propriétés statiques si besoin pour voir quel est son intérêt).

Si ma classe me permettait de faire autre chose que de me connecter à mon serveur de base de données, je pourrais en avoir besoin dans une méthode d'une autre classe, dans une fonction. Plus exactement, je pourrais avoir besoin d'une instance de cette classe, pas de la classe elle-même.

Par exemple, $DB -> query() pourrait être une méthode qui permet d'exécuter une requête sur la base de données.

Si j'ai besoin de cette méthode dans une méthode de la classe user, c'est très simple :

class useraccount {
    private $DB;
    public function __construct() {
       $this -> DB = DB_single::getInstance('host', 'user', 'password', 'dbname');
    }

    public function log_in() {
       if ($this -> DB -> query('.............')) {
          // Patati patata
       }
    }
}

Mais bon... L'intérêt d'une classe de connexion à un serveur de base de données est essentiellement de permettre l'utilisation de plusieurs types de serveurs (MySQL, PostGreSQL, Oracle, MSSQL, Access, SQLite, etc), et ce, sans jamais changer une seule ligne de code.

Ton code, tel que tu le présente, ne sert pas à grand chose. Que la classe user étende la classe connexion est aberrant : tu vas créer une nouvelle connexion en même temps que la première. Si ton serveur est limité en nombre de connexion simultanées, ça pourrait poser problème.
C'est inutile : lorsque, dans un script, tu te connectes à une base de données, la connexion est active pour tout le script. Tu peux en ouvrir, plusieurs, mais ce n'est intéressant que si elles sont différentes (autre user ou autre serveur, dans une moindre mesure, autre base).

Bon... j'ai écrit une tartine, je ne sais plus trop où je voulais aller. Si ça te permet d'y voir plus clair, c'est déjà ça...


Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
jeudi 17 avril 2008 à 23:02:37 | Re : Gestion d'un user

atchoumen

Merci pour ton explication,
je me doutais que mon code était un peu foireux ! en tout cas grace à toi j'y vois plus clair et la connexion dans mon cerveau c'est refaite aléluhia !!!!!
Encore merci ++


Cette discussion est classée dans : connection, php, gestion, user, fr


Répondre à ce message

Sujets en rapport avec ce message

probleme de connection [ par djagger ] Salut !G un site chez un hébergeur avec une base de données.Je n'arrive pas a me connecter à cette DB à partir d'une page PHP.je fais :$host="localho Gestion membres [ par Nestor ] salutje souhaite ajouter une gestion membre sur mon site.pour cela je voudrais savoir quel script php vous me conseillez vous ?(je suis nouveau dans l connection base Oracle [ par thorod ] Bonjour à tous,Bien voila, je cherche depuis un certain temps et je trouve pas de solution.J'ai un serveur IIS, avec oracle Net 8 installé. L'extensio Pige pas aidez moi [ par g0belin ] Pk sa me dit sa ???------------------------Warning: Access denied for user: 'newge@localhost' (Using password: YES) in c:\easyphp\www\site\php\ezine_d gestion de pdf en php [ par jawad75 ] salut tous le mondeje coulais savoir juste si qlq un a deja fais un prog qui gere des .pdf en php, en utilisant fpdf :) PB avec les sessions [ par lpikachu58 ] Salut les jeunes, j'ai un pb avec les sessions php. Ca marche mais j'ai warning que je voudrais bien virer. Ma question est comment ne pas avoir de wa Gestion automatique d'enregistrement [ par recmi ] J'ai déveloopé une appli en VB6. J'ai installé dèrnierment Easy PHP 7 sur ma tour.Avec PHP on peut envoyer des mail à partir d'un site. J'aimerai avo php: gestion automatique quotidienne [ par manu22 ] Bonjour à tous,Je travaille actuellement sur un site internet en utilisant php et mysql.Je peux entrer des nouveaux clients sur ma base de données via Gestion formulaire history.go(-1) avec conservation de variables [ par apz ] ----------------------------------------------------------------------Salut,config.php :define('ERRT','<Table Border=1 CellSpacing=0 CellPadding=4 bor htaccess et $PHP_AUTH_USER [ par Clonk ] bonjour,j'aimerais savoir qi quelqu'un connait un serveur web gratuit ou $PHP_AUTH_USER marche, par ce que chez free, ça a pas l'air de marcher des ma


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales