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

PHP & Base de données Discussion :

PHP POO et PDO [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 11
    Points
    11
    Par défaut PHP POO et PDO
    Bonjour à tous,
    Je me mets tout juste à la POO en PHP après avoir quelques petits projets en procédural...
    Je suis désolé, j'ai lu pas mal de choses sur la prog. objet et PDO mais je n'arrive pas bien à comprendre comment peut-on utiliser dans une classe...

    Voici une petite classe d'identification pour faire des petits essais :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <?php
    class Identification
    {
    	private $login;
    	private $password;
    	private $mail;
    	private $cat;
     
    	public function resultat($mail, $pass)
    	{
    		$this->mail = strip_tags($mail);
    		$this->password = strip_tags($pass);
     
    		if($this->testInfos($this->mail, $this->password) == true)
    		{
    			$_SESSION['acces_visiteur']= "oui";
    			$_SESSION['login'] = $this->login;
    			$_SESSION['mail'] = $this->mail;
    			$_SESSION['cat'] = $this->cat;
     
    			$message_erreur = "Identification OK";
    		}
    		else
    		{
    			$message_erreur = "L'identification a échouée";
    		}
     
    	}
     
     
    	private function emailValide($mail)
    	{
    		return preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $mail);
    	}
     
     
    	private function testInfos($login, $password)
    	{
    		$bool = true;
     
    		if($this->emailValide($login)== true)
    		{
    			$req = $bdd->query('SELECT * FROM comptes_utilisateurs WHERE Adresse_Email = '.$login.'';
    			while($data = $req>fetch()){
    			{
    				if(md5($password) == $data->Mot_de_Passe)
    				{
    					$bool = true;
    					$this->login = $data->Nom_Utilisateur;
    					$this->cat = $data->Categorie;
    				}
    			}
    			$req->closeCursor();
    		}
     
    		return $bool;
    	}
     
     
    }
    Et mon fichier connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$bdd = new PDO('mysql:host=localhost;dbname=maBDD', 'root', '', $pdo_options);
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
    ?>
    Mais évidemment ça ne fonctionne pas, et je ne vois pas comment utiliser PDO dans les classes...

    Merci pour votre aide.

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    il te manque un tiret là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($data = $req->fetch()){
    Développeur informatique contrarié...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    En effet, il manquait un tiret, mais j'ai toujours cette erreur :
    Fatal error: Call to a member function query() on a non-object in C:\wamp\www\reseau-beaute-2\Includes\class_identification.php on line 43

  4. #4
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    Effectivement dans ta classe il n'y aucune référence à l'objet $bdd, donc soit tu ajoutes un attribut à ta classe qui pointera vers l'objet $bdd soit tu le passes en paramètre aux méthodes qui en ont besoin (requête)
    Développeur informatique contrarié...

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Comme le dis vorace , la variable $bdd n'est pas connue dans ta classe , tout simplement car chaque classe à un contexte d’exécution qui lui est propre.

    La solution qui à mon sens est la plus correcte est de passer de ton objet pdo à ta classe. Soit via un constructeur soit via un setter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Identification
    {
    	private $pdo;
     
    	public function __construct(PDO $objetpdo)
    	{
    		$this->pdo = $objetpdo
    	}
     
    	public function uneMethode()
    	{
    		$this->pdo->query('...');
    	}
    }
    L'avantage de passer par le constructeur , c'est que tu es certains qu'une fois ta classe instanciée, tu auras un objet pdo à disposition. L’inconvénient c'est que ta classe va être fortement dépendante de PDO , ce qui sera moins le cas en passant par un setter mais demandera des contrôles plus important (sur l’existence de l'objet pdo).


    Autre remarque sur ton code , puisque tu sembles débuter en POO. Ta classe identification contient une méthode de vérification d'email. Pour moi c'est une erreur. Le rôle de ta classe d'identification c'est ... d'identifier. Vérifier la validité d'un email c'est une autre tache.
    Donc soit
    - Tu ne crée pas une méthode spécifique à cette tache et tu utilise simple un filtre php
    - Tu crées une classe statique spécifique aux controles sur les chaines de caractères que tu utiliseras dans ta classe Identification.

    le but final étant de ne pas avoir à réécrire une méthode de validation d'email dans 4 classe différentes.
    Arriver à correctement distinguer les fonctionnalités d'une classe est probablement une des notions les plus difficiles en objet.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Ok je comprends mieux ce qui ne vas pas...

    Merci à vous...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/03/2016, 14h53
  2. [PDO] PDO PHP-POO et requêtes préparées
    Par distar dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/01/2012, 19h04
  3. Livre php poo
    Par saturn1 dans le forum Livres
    Réponses: 8
    Dernier message: 04/12/2008, 18h34
  4. PHP, POO et MySQL
    Par boby15000 dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2008, 16h09

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