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 :

Choix entre deux fonctions [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut Choix entre deux fonctions
    bonjour,
    je souhaite comprendre pk dans le code ci on relie la variable id a la valeur i AVEC le bind_param?

    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
    <?php
    public function getUnique($id)
            {
                $id = (int) $id;
     
                $requete = $this->db->prepare('SELECT id, auteur, titre, contenu, DATE_FORMAT (date_ajout, \'le %d/%m/%Y à %Hh%i\') AS date_ajout, DATE_FORMAT (date_modif, \'le %d/%m/%Y à %Hh%i\') AS date_modif FROM news WHERE id = ?');
                $requete->bind_param('i', $id);
                $requete->execute();
     
                $requete->bind_result($id, $auteur, $titre, $contenu, $date_ajout, $date_modif);
     
                $requete->fetch();
     
                return new News(array(
                    'id' => $id,
                    'auteur' => $auteur,
                    'titre' => $titre,
                    'contenu' => $contenu,
                    'date_ajout' => $date_ajout,
                    'date_modif' => $date_modif
                ));
            }
    ?>
    de plus j'avais fais ce code moi est ce moin bien fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    public function getUnique($id)
    	{
     
    		$requete = $this->db->prepare('SELECT id ,titre ,description ,estActive ,DATE_FORMAT (dateModification, \'le %d/%m/%Y à %Hh%i\') as dateModification, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation ,idSupCategorie FROM categorie WHERE id =  :id');
     
     
    		$requete->execute();
     
    		return new Categorie($requete->fetch(PDO::FETCH_ASSOC));
     
    	}
    ?>
    MERCI :p

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    le bind sert a rien, deja y'a pas de type, et le fetchMode n'est pas du type BOUND

    pour ton seconde code tu peux faire un FETCH_CLASS

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    quelle est l avantage du FETCH_Clas par rapport au FETCH_ASSOC, merci.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par kate59 Voir le message
    quelle est l avantage du FETCH_Clas par rapport au FETCH_ASSOC, merci.
    FETCH_CLASS, va directement de créer un objet en fonction de la class donnée

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci une autre petite question, j'ai créer cette fonction mais elle ne renvoie rien, pK?
    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
    <?php
    public function getByEmail($email)
    	{
     
     
    		$email = (string) $email;
     
    		$requete = $this->db->prepare('SELECT id, nom, prenom, email, password, activer, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation , status FROM employe  WHERE email = :email');
    		$requete->binValue(':email', $email, PDO::PARAM_INT);
    		$requete->execute();
     
    		return new Employe($requete->fetch(PDO::FETCH_ASSOC));
     
     
    	}
    	?>
    alors que celle-ci fonctionne:
    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
    <?php
    public function getByEmail($email)
    		{
    			$listemploye = array();
     
    $requete = 'SELECT id ,nom ,prenom ,email,password,activer, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation ,status FROM employe WHERE email = \''.$email.'\'';
     
     
    $requete = $this->db->query($requete);
     
    		while ($employe = $requete->fetch(PDO::FETCH_ASSOC))
    		$listemploye[] = new Employe ($employe);
     
    		$requete->closeCursor();
     
    		return $listemploye;
     
    		}
    ?>
    merci.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est pas comme ca que ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete->setFetchMode(PDO::FETCH_CLASS, 'Employe');
    return $requete->fetch();
    //return $requete->fetchAll();
    mais après tout dépend comment est construite ta classe

    EDIT : sinon ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete->binValue(':email', $email, PDO::PARAM_INT); 
    sert a rien

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    JE VAIS Ceci mais le array est vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    public function getByEmail($email)
    		{
    	$requete = $this->db->prepare('SELECT id ,titre ,description ,estActive ,DATE_FORMAT (dateModification, \'le %d/%m/%Y à %Hh%i\') as dateModification, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation ,idSupCategorie FROM categorie WHERE email = :email');
            $requete->execute(':email' => $email);
            return $requete->fetch(PDO::FETCH_CLASS, 'Employe' /* get_called_class() */);
     
    ?>
    }

    MERCI

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    je n'ai plus d'erreur qu'en pensez vous:

    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
    <?php
    public function getUnique($id)
    	{
     
     
     
     
    		$requete = $this->db->prepare('SELECT id, nom, prenom, email, password, activer, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation , status FROM employe  WHERE id = :id');
    		$requete->binValue(':id', (int) $id, PDO::PARAM_INT);
     
    $requete->execute();
     
    // $student is an objet of type Student
    return $employe = $requete->fetch(PDO::FETCH_CLASS, 'Employe');
     
     
    	}
    ?>

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par kate59 Voir le message
    je n'ai plus d'erreur qu'en pensez vous:

    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
    <?php
    public function getUnique($id)
    	{
     
     
     
     
    		$requete = $this->db->prepare('SELECT id, nom, prenom, email, password, activer, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation , status FROM employe  WHERE id = :id');
    		$requete->binValue(':id', (int) $id, PDO::PARAM_INT);
     
    $requete->execute();
     
    // $student is an objet of type Student
    return $employe = $requete->fetch(PDO::FETCH_CLASS, 'Employe');
     
     
    	}
    ?>
    ca ma l'air pas mal, tu peux direct faire le return

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function getUnique($id)
    {
        $requete = $this->db->prepare('SELECT id, nom, prenom, email, password, activer, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation , status FROM employe  WHERE id = :id');
        $requete->binValue(':id', (int) $id, PDO::PARAM_INT); 
        $requete->execute();
     
        // $student is an objet of type Student
        return $requete->fetch(PDO::FETCH_CLASS, 'Employe');
    }

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    excusez moi je me suis tromper de function mon array() reste vide.

    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
    <?php
    public function getByEmail($email)
    		{
     
    		$requete = $this->db->prepare('SELECT id, nom, prenom, email, password, activer, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation , status FROM employe  WHERE email = :email');
    		$requete->binValue(':email',$email, PDO::PARAM_STR);
     
    $requete->execute();
     
    // $student is an objet of type Student
    return $employe = $requete->fetch(PDO::FETCH_CLASS, 'Employe');
     
     
    		}
    ?>
    est ce parce que c est un string voici l erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to undefined method PDOStatement::binValue() in C:\wamp\www\ecommerce\class\EmployeManager.class.php on line 197

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par kate59 Voir le message
    excusez moi je me suis tromper mon array() reste vide.
    c'est normale, tu construits les propriétés de ta classe avec un array
    montre ta classe Employe

  12. #12
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    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
    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
     
    voici la class excuse du retard.
    <?php
     
    class Employe
    {   
    	private $id;
    	private $nom;
    	private $prenom;
    	private $email;
    	private $password;
    	private $activer;
    	private $dateCreation;
    	private $status;
    	private $erreurs = array();
     
     
    	/**
    		* Constructeur de la classe Personnage
    		* @param $donnees array Les valeurs à assigner au personnage
    		* @return void
    		*/
     
    	public function __construct($valeurs = array())
    	{
    		if (!empty($valeurs)) // Si on a spécifié des valeurs, alors on hydrate l'objet
    		$this->DonnerProprietes($valeurs);
     
     
    	}
     
     
    	/**
    		* Méthode permettant d'assigner les valeurs aux attributs
    		* @param $donnees array Les valeurs à assigner
    		* @return void
    		*/
    	public function DonnerProprietes(array $donnees)
    	{
     
    		 foreach ($donnees as $attribut => $valeur)
                {
                    $methode = 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
     
                    if (is_callable(array($this, $methode)))
                    {
                        $this->$methode($valeur);
                    }
                }
    	}
     
     
     
    	/**
    		* Méthode permettant de savoir si le formulaire est valide
    		* @return bool
    		*/
    	public function isValid()
    	{
     
    		return !(empty($this->nom) || empty($this->prenom)|| empty($this->email)|| empty($this->password)|| empty($this->dateCreation)|| empty($this->activer)|| empty($this->status));
    	}
     
     
     
    	public function setId($id)
    	{
    		$this->id = (int) $id;
    	}
     
     
    	public function setNom($nom)
    	{
    		if (!is_string($nom) || empty($nom))
    		$this->erreurs[] = self::NOM_INVALIDE;
    		else
    		$this->nom = $nom;
    	}
     
    	public function setPrenom($prenom)
    	{
    		if (!is_string($prenom) || empty($prenom))
    		$this->erreurs[] = self::PRENOM_INVALIDE;
    		else
    		$this->prenom = $prenom;
    	}
    	public function setEmail($email)
    	{
    		if (!is_string($email) || empty($email))
    		$this->erreurs[] = self::EMAIL_INVALIDE;
    		else
    		$this->email = $email;
    	}
    ....
     
    	// GETTERS 
     
    	public function erreurs()
    	{
    		return $this->erreurs;
    	}
     
    	public function getId() {
    		return (int) $this->id;
    	}
    public function getEmail() {
    		return (string) $this->email;
    	}
    ....
     
     
    }
    ?>
    voici une fonction mais avec fetch assoc si je l'utilise est pas mieux avec ma class ?
    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
     
    <?php
     
    	public function getEmail($email)
    	{
     
     
     
    		$requete = $this->db->prepare('SELECT id ,titre ,description ,estActive ,DATE_FORMAT (dateModification, \'le %d/%m/%Y à %Hh%i\') as dateModification, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation ,idSupCategorie FROM categorie WHERE email =  :email');
    		   $requete->bindValue(':email', $email, PDO::PARAM_STR);
                $requete->execute();
     
    		return new Employe($requete->fetch(PDO::FETCH_ASSOC));
     
     
    }
     
     
    ?>
    et quand je met celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Catchable fatal error: Object of class Employe could not be converted to string in C:\wamp\www\ecommerce\admin\index.php on line 39
    [/CODE]

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    il va falloir utilise __set si tu veux le faire marcher avec FETCH_CLASS

  14. #14
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    que dois-je changer avec le code, alors?

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par kate59 Voir le message
    que dois-je changer avec le code, alors?
    change pas toutes tes classes reste sur le FECTH_ASSOC

  16. #16
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    d accord mais a ton avis pk j ai cette erreur:

    Catchable fatal error: Object of class Employe could not be converted to string in C:\wamp\www\ecommerce\admin\index.php on line 39

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    public function getByEmail($email)
    		{
    		$requete = $this->db->prepare('SELECT id, nom, prenom, email, password, activer, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation , status FROM employe  WHERE email = :email');
                $requete->bindValue(':email',$email, PDO::PARAM_STR);
                $requete->execute();
     
                return new Employe($requete->fetch(PDO::FETCH_ASSOC));
     
    		}?>
    merci.

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    et c'est quoi la ligne 39 de ton index.php ?

  18. #18
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    ah oublie cette ligne en faite si tu veux j ai plus l erreur mais ma fonction getByEmail($email) me renvoie ca?

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par kate59 Voir le message
    ah oublie cette ligne en faite si tu veux j ai plus l erreur mais je n'ai rien retourner par fonction getByEmail($email)?
    Est que ma fonction est mal conçut.

    ca me renvoie array();
    montre ce que tu fais au moment d'appeler ton getByEmail($email)

  20. #20
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    Est que ma fonction est mal conçut.

    ca me renvoie Employe Object ( [id:Employe:private] => 1 [nom:Employe:private] => *** [prenom:Employe:private] => elodie [email:Employe:private] => ***
    [password:Employe:private] =>***activer:Employe:private] => [dateCreation:Employe:private] => [status:Employe:private] => [erreurs:Employe:private] => Array ( [0] => 5 [1] => 6 [2] => 7 ) ) ;

    si tu veux j'ai ca:
    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
    <?php
    if ( $manager->connexion($email,$password)==true)
     
    		{	
     
     
     
    print_r($manager->getByEmail($email));
    			foreach ($manager->getByEmail($email) as $employe)
    			{
    			echo '2';
    			// On  enregistre ses données dans la session
    			 // permet de vérifier que l'employe est bien connecté
    			$_SESSION['nom'] = $employe->getNom();
    			$_SESSION['prenom'] = $employe->getPrenom();
    			$_SESSION['email'] = $employe->getEmail();
    			$_SESSION['password'] = $employe->getPassword();
    			$_SESSION['active'] = $employe->getEstActive();
    			$_SESSION['status'] = $employe->getStatus();
     
    			}
     
    			//header('Location:admin.php');  
    		}
    ?>
    on rentre bien dans connexion mais pas dans foreach.

    Apres avoir bien regarder je me demande si c est le @ de L EMAIL en tant que string qui pourrait bloquer?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. attendre 1 seconde entre deux fonctions
    Par urousseau dans le forum C++Builder
    Réponses: 8
    Dernier message: 08/06/2008, 19h14
  2. sauver une variable entre deux fonctions ?
    Par shloka dans le forum Langage
    Réponses: 10
    Dernier message: 03/04/2007, 14h38
  3. [MySQL] conflit entre deux fonction while
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/12/2006, 12h56
  4. [MySQL] Conflit entre deux fonction WHILE
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/11/2006, 18h15
  5. Choix entre deux champs dans une requete
    Par Pico10 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/07/2005, 15h36

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