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

Langage PHP Discussion :

idée amélioration gestion erreur et code pour class php5


Sujet :

Langage PHP

  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 idée amélioration gestion erreur et code pour class php5
    comme convenu je montre les fruits de mon travail sur les categories d'un site ecommerce en php5.
    Je prenderai toute suggestion pour l'ameliorer.
    un peu long excusez moi mais beaucoup de répétition.

    class.categorie

    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    <?php
     
    class Categorie
    {   
    	private $id;
    	private $titre;
    	private $description;
    	private $estActive;
    	private $estDansMenu;
    	private $dateModification;
    	private $dateCreation;
    	private $idSupCategorie;
    	private $erreurs = array();
     
    	  /**
             * Constantes relatives aux erreurs possibles rencontrées lors de l'exécution de la méthode
             */
     
    	const TITRE_INVALIDE = 1;
    	const DESCRIPTION_INVALIDE = 2;
    	const CONTENU_INVALIDE = 3;
    	const ESTACTIVE_INVALIDE = 4;
    	const ESTDANSMENU_INVALIDE = 5;
    	const DATEMODIFICATION_INVALIDE = 6;
    	const DATECREATION_INVALIDE = 7;*/
    	/**
    		* Constructeur de la classe Personnage
    		* @param $donnees array Les valeurs à assigner au personnage
    		* @return void
    		*/
     
    	public function __construct(array $donnees)
    	{
    		$this->DonnerProprietes($donnees);
     
    	}
     
    	/**
    		* Méthode permettant d'assigner les valeurs aux attributs
    		* @param $donnees array Les valeurs à assigner
    		* @return void
    		*/
    	public function DonnerProprietes(array $donnees)
    	{
    		//on parcourt le tableau $donnees et la clé de l'élément courant est copiée dans $key tandis que sa valeur est copiée dans $value!
    		foreach ($donnees as $key => $value)
    		{
    			//switch équivaut à une série d'instructions if sur la key
    			switch ($key)
    			{
    				/*1 cas id: la cle vaut la valeur $value de type int*/
    			case 'id':
    				$this->$key = (int) $value;
    				break;
    				/*2 cas titre: la cle vaut la valeur $value de type string*/    
    			case 'titre':
    				$this->titre = (string) $value;
    				break;
    				/*3 cas description: la cle vaut la valeur $value de type string*/		
    			....
    			}
    		}
    	}
     
    	/**
    		* Méthode permettant de savoir si la categorie est nouvelle
    		* @return bool
    		*/
    	public function isCategorie()
    	{
    		return empty($this->id);
    	}
     
    	/**
    		* Méthode permettant de savoir si la categorie est valide
    		* @return bool
    		*/
    	public function isValid()
    	{
    		return !(empty($this->titre) || empty($this->description));
    	}
     
     
    	// SETTERS //
     
    	public function setId($id)
    	{
    		$this->id = (int) $id;
    	}
     
     
    	public function setTitre($titre)
    	{
    		if (!is_string($titre) || empty($titre))
    		$this->erreurs[] = self::TITRE_INVALIDE;
    		else
    		$this->titre = $titre;
    	}
     
    	public function setDescription($description)
    	{
    		if (!is_string($description) || empty($description))
    		$this->erreurs[] = self::CONTENU_INVALIDE;
    		else
    		$this->description = $description;
    	}
    	....
     
     
    	// GETTERS 
     
    public function erreurs()
            {
                return $this->erreurs;
            }
     
    	public function getId() {
    		return (int) $this->id;
    	}
     
    	public function getTitre() {
    		return (string) $this->titre;
    	}
     
    	public function getDescription() {
    		return (string) $this->description;
    	}
     
    	....
     
    	public function getDateModifcation($dateModif)
    	{
    		if (is_string($dateModif) && preg_match('`le [0-9]{2}/[0-9]{2}/[0-9]{4} à [0-9]{2}h[0-9]{2}`', $dateModif))
    		$this->date_Modif = $dateModif;
    	}
     
    	...
     
    }
    ?>
    categorieManager.php
    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
     
    <?php
    /**
    	*class qui va permettre de faire le lien entre la BDD et la categorie
    	**/ 
    class CategorieManager
    {
    	/**
    		* Attribut contenant l'instance représentant la BDD
    		* @type PDO
    		*/
     
    	private $db; 
    	/**
    		* Constructeur étant chargé d'enregistrer l'instance de PDO dans l'attribut $db
    		**/
     
     
    	public function __construct($db)
    	{
    		$this->db = $db;
    	}
     
     
     
    	/**
    		* Méthode permettant d'ajouter une categorie
    		* @param $categorie Categorie La categorie à ajouter
    		* @return vide
    		*/
     
     
    	protected function add(Categorie $categorie)
    	{
    		$requete = $this->db->prepare('INSERT INTO categorie SET titre = :titre, description = :description,estActive = :estActive, estDansMenu = :estDansMenu,dateModification = :dateModification, dateCreation = :dateCreation,idSupCategorie = :idSupCategorie');
     
    		$requete->bindValue(':titre', $categorie->titre());
    		$requete->bindValue(':description', $categorie->description());
    		$requete->bindValue(':estActive', $categorie->estActive());
    		$requete->bindValue(':estDansMenu', $categorie->estDansMenu());
    		$requete->bindValue(':dateModification', $categorie->dateModification());
    		$requete->bindValue(':dateCreation', $categorie->dateCreation());
    		$requete->bindValue(':idSupCategorie', $categorie->idSupCategorie());
     
    		$requete->execute();
    	}
     
    	/**
    		* Méthode renvoyant le nombre de categorie total
    		* @return int
    		*/
     
    	public function count()
    	{
    		return $this->db->query('SELECT COUNT(*) FROM categorie')->fetchColumn();
    	}
     
    	/**
    		* Méthode permettant de supprimer une categorie
    		* @param $id int L'identifiant de la categorie à supprimer
    		* @return vide
    		*/
     
    	public function delete($id)
    	{
    		$requete = $this->db->prepare('DELETE FROM categorie WHERE id = :id');
     
    		$requete->bindValue(':id', $id, PDO::PARAM_INT);
     
    		$requete->execute();
    	}
     
    	/**
    		* Méthode retournant une liste de categorie demandée
    		* @param $debut int La première categorie à sélectionner
    		* @param $limite int Le nombre de categorie à sélectionner
    		* @return array La liste des categorie. Chaque categorie entrée est une instance de categorie.
    		*/
     
    	public function getList($debut = -1, $limite = -1)
    	{
    		$listeCategorie = array();
     
    		$sql = 'SELECT id ,titre ,description ,estActive ,estDansMenu ,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 ORDER BY id DESC';
     
     
    		if ($debut != -1 || $limite != -1)
    		$sql .= ' LIMIT ' . (int) $debut . ', ' . (int) $limite;
     
    		$requete = $this->db->query($sql);
     
    		while ($categorie = $requete->fetch(PDO::FETCH_ASSOC))
    		$listeCategorie[] = new Categorie ($categorie);
     
    		$requete->closeCursor();
     
    		return $listeCategorie;
    	}
     
    	/**
    		* Méthode retournant une categorie précise
    		* @param $id int L'identifiant de la categorie à récupérer
    		* @return Categorie La categorie demandée
    		*/
     
    	public function getUnique($id)
    	{
    		$requete = $this->db->prepare('SELECT id ,titre ,description ,estActive ,estDansMenu ,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 = ?');
    		$requete->bindValue(':id', (int) $id, PDO::PARAM_INT);
    		$requete->execute();
     
    		return new Categorie($requete->fetch(PDO::FETCH_ASSOC));
    	}
     
    	/**
    		* Méthode permettant d'enregistrer une categorie
    		* @param $Categorie Categorie la categorie à enregistrer
    		* @voir function add()
    		* @voir fonction modify()
    		* @return vide
    		*/
    	public function save(Categorie $categorie)
    	{
    		if ($categorie->isValid())
    		{
    			$categorie->isCategorie() ? $this->add($categorie) : $this->update($categorie);
    		}
    		else
    		{
    			throw new RuntimeException('La categorie doit être valide pour être enregistrée');
    		}
    	}
     
    	/**
    		* Méthode permettant de modifier une categorie
    		* @param $categorie categorie la categorie à modifier
    		* @return vide
    		*/
     
    	protected function update(Categorie $Categorie)
    	{
    		$requete = $this->db->prepare('UPDATE categorie SET titre = :titre, description = :description ,estActive = :estActive, estDansMenu = :estDansMenu,dateModification = NOW(),idSupCategorie = :idSupCategorie WHERE id = :id');
     
    		$requete->bindValue(':titre', $Categorie->titre());
    		$requete->bindValue(':description', $Categorie->description());
    		$requete->bindValue(':estActive', $Categorie->estActive());
    		$requete->bindValue(':estDansMenu', $Categorie->estDansMenu());
    		$requete->bindValue(':dateModification', $Categorie->dateModification());
    		$requete->bindValue(':idSupCategorie', $Categorie->idSupCategorie());
    		$requete->bindValue(':id', $Categorie->id(), PDO::PARAM_INT);
     
    		$requete->execute();
    	}
    }
    ?>
    J’ai travaillé sur le tuto de POO du site zero avec comme modèle le tp de news.
    Petite question pourquoi a t-il mit les attributs en protected dans ce tuto, car je croyais que c’était important qu'il soit en private?

    MERCI POUR TOUS VOS CONSEILS.

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par kate59 Voir le message
    petite question pk a t-il mit les attribut en protected dans ce tuto, car je croyais que c etait important qu'il soit en private?
    Un attribut de type protected d'une classe mère peut être utilisé dans une classe fille à la différence d'un attribut de type private.

    L'usage veut également (mais à toi de voir) que les attributs de classe soit préfixés d'un underscore afin de les différencier rapidement des autres variables.


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            private $_id;
    	private $_titre;
    	private $_description;
    	private $_estActive;
    	private $_estDansMenu;
    	private $_dateModification;
    	private $_dateCreation;
    	private $_idSupCategorie;
    	private $_erreurs = array();

    Mais bon, c'est nullement obligatoire

  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
    merci et que pense tu de la gestion d'erreur?

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Ca me semble correct dans la théorie, reste à savoir comment tu utilises ton tableau d'erreurs ensuite dans la pratique. Tu boucles dessus et affiches toutes les erreurs ?

  5. #5
    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 727
    Points
    10 727
    Par défaut
    comment tu gères les erreurs de PDO ?

  6. #6
    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
    exemple dans mon admin.php:

    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
    <?php
    ..
     if (isset ($_POST['categorie']))
        {
            $categorie = new categorie (
                array (
     
                    'titre' => $_POST['titre'],
                    'description' => $_POST['description']
                )
            );
     
            if (isset ($_POST['id']))
                $categorie->setId($_POST['id']);
     
            if ($categorie->isValid())
            {
                $manager->save($categorie);
     
                $message = $categorie->isCategorie() ? 'La categorie a bien été ajoutée !' : 'La categorie a bien été modifiée !';
            }
            else
                $erreurs = $categorie->erreurs();
        }
    ...
     
     <?php if (isset($erreurs) && in_array(categorie::TITRE_INVALIDE, $erreurs)) echo 'Le titre est invalide.<br />'; ?>
                    Titre : <input type="text" name="titre" value="<?php if (isset($categorie)) echo $categorie->getTitre(); ?>" /><br />
     
                    <?php if (isset($erreurs) && in_array(categorie::DESCRIPTION_INVALIDE, $erreurs)) echo 'La description est invalide.<br />'; ?>
                    Description :<br /><textarea rows="8" cols="60" name="description"><?php if (isset($categorie)) echo $categorie->getDescription(); ?></textarea><br />
    ?>

  7. #7
    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 727
    Points
    10 727
    Par défaut
    si tu fais un
    getUnique(0)

    ca donne quoi ?


    EDIT : par contre ca c'est pas top
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($categorie = $requete->fetch(PDO::FETCH_ASSOC))
    $listeCategorie[] = new Categorie ($categorie);
     
    $requete->closeCursor();
    fais juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $listeCategorie = fetchAll(PDO::FETCH_CLASS, 'Categorie');

  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 ne l'ai pas encore fait je suis au début en PDO mais si tu a des conseils par rapport à mon cas? tu parle d'exceptions c’est ça?

  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 727
    Points
    10 727
    Par défaut
    Citation Envoyé par kate59 Voir le message
    je ne l'ai pas encore fait je suis au debut en PDO mais si tu a des conseils par rapport a mon cas? tu parle d'exeptions c est ca?
    oui, t'as 3 mode diffèrent pour gérer les erreurs : http://php.net/manual/fr/pdo.error-handling.php

  10. #10
    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 727
    Points
    10 727
    Par défaut
    sinon pour eviter de faire 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
    protected function add(Categorie $categorie)
        {
            $requete = $this->db->prepare('INSERT INTO categorie SET titre = :titre, description = :description,estActive = :estActive, estDansMenu = :estDansMenu,dateModification = :dateModification, dateCreation = :dateCreation,idSupCategorie = :idSupCategorie');
     
            $requete->bindValue(':titre', $categorie->titre());
            $requete->bindValue(':description', $categorie->description());
            $requete->bindValue(':estActive', $categorie->estActive());
            $requete->bindValue(':estDansMenu', $categorie->estDansMenu());
            $requete->bindValue(':dateModification', $categorie->dateModification());
            $requete->bindValue(':dateCreation', $categorie->dateCreation());
            $requete->bindValue(':idSupCategorie', $categorie->idSupCategorie());
     
            $requete->execute();
        }
    tu peux faire un methode toArray() a ta Class catégorie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected function add(Categorie $categorie)
        {
            $requete = $this->db->prepare('INSERT INTO categorie SET titre = :titre, description = :description,estActive = :estActive, estDansMenu = :estDansMenu,dateModification = :dateModification, dateCreation = :dateCreation,idSupCategorie = :idSupCategorie');
     
            $requete->execute($categorie->toArray());
        }

  11. #11
    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 quelle est a ton avis le meilleur entre les 3?

  12. #12
    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 727
    Points
    10 727
    Par défaut
    Citation Envoyé par kate59 Voir le message
    merci quelle est a ton avis le meilleur entre les 3?
    pour de la POO je dirais le mode PDO::ERRMODE_EXCEPTION, mais ca va t'obligé la bien les gérer et faire des try...catch au bon moment

    le mode PDO::ERRMODE_WARNING est bien pour debuter


    le mode PDO::ERRMODE_SILENT oublie le c'est le mode par defaut et il n'affiche pas les erreurs, donc si t'a un probleme avec un requête il va rien dire

  13. #13
    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 je vais regarder donc le 2.

    je me suis tromper pour la focntion c est celle ci:

    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
    <?PHP
    ...
    	public function getUnique($id)
            {
                $id = (int) $id;
     
                $requete = $this->db->prepare('SELECT id ,titre ,description ,estActive ,estDansMenu ,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 = ?');
                $requete->bindParam('i', $id);
                $requete->execute();
     
                $requete->bind_result($id, $titre, $description, $estActive, $estDansMenu, $dateModification,$dateCreation,$idSupCatgeorie);
     
                $requete->fetch();
     
                return new Catgeorie(array(
                    'id' => $id,
                    'titre' => $titre,
                    'description' => $description,
                    'estActive' => $estActive,
                    'estDansMenu' => $estDansMenu,
                    'dateModification' => $dateModification,
    				 'dateCreation' => $dateCreation,
                    'idSupCategorie' => $idSupCategorie
                ));
            }
    ?>
    MAIS J'ai une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\ecommerce\class\CategorieManager.class.php on line 111
     
    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number in C:\wamp\www\ecommerce\class\CategorieManager.class.php on line 111
     
    Fatal error: Call to undefined method PDOStatement::bind_result() in C:\wamp\www\ecommerce\class\CategorieManager.class.php on line 
     
    113
    merci.

  14. #14
    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 727
    Points
    10 727
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete->bindParam(1, $id);

    mais ce que je te disais plus haut c'est que tu peux faire des fetch directement dans les class avec PDO::FETCH_CLASS

  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 727
    Points
    10 727
    Par défaut
    dans ta classe il faudrais que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private $id;
    private $titre;
    private $description;
    private $estActive;
    private $estDansMenu;
    private $dateModification;
    private $dateCreation;
    private $idSupCategorie;
    private $erreurs = array();
    sois public, et faire une surchage de __set et voir aussi de __call si tu veux garder tes setTitre par exemple

  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
    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
    	public function getUnique($id)
            {
                $id = (int) $id;
     
                $requete = $this->db->prepare('SELECT id ,titre ,description ,estActive ,estDansMenu ,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 = ?');
                $requete->bindParam(1, $id);
                $requete->execute();
     
                $requete->bind_result($id, $titre, $description, $estActive, $estDansMenu, $dateModification,$dateCreation,$idSupCatgeorie);
     
                $requete->fetch();
     
                return new Catgeorie(array(
                    'id' => $id,
                    'titre' => $titre,
                    'description' => $description,
                    'estActive' => $estActive,
                    'estDansMenu' => $estDansMenu,
                    'dateModification' => $dateModification,
    				 'dateCreation' => $dateCreation,
                    'idSupCategorie' => $idSupCategorie
                ));
            }
    mais ca met ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to undefined method PDOStatement::bind_result() in C:\wamp\www\ecommerce\class\CategorieManager.class.php on line 113
    excusez moi je débute en pdo.

    Pourquoi dois-je changer à ton avis en public car c’est une chose a jamais faire normalement.

  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 727
    Points
    10 727
    Par défaut
    bind_result ca existe pas

    enlève la ligne, tu peux pas bind(er) des variable qui n'existe pas non plus, si tu veux faire ca il va falloir faire un bindParam pour chaque valeur
    et ensuite faire $requete->fetch(PDO::FETCH_BOUND);

    mais faire des binParam si tu bind pas ca sert a rien, autant faire un FETCH_ASSOC pour le coup

  18. #18
    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 727
    Points
    10 727
    Par défaut
    Citation Envoyé par kate59 Voir le message
    pk doit je changer a ton avis en public car c est une chose a jamais faire normalement.
    t'as vu ca ou ?

    tu fais des set pour chaque valeur ca reviens au même

  19. #19
    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
    Le principe est exactement le même pour la POO : l'utilisateur de la classe doit se contenter d'invoquer les méthodes en ignorant les attributs. Il s'en fiche : comme le pilote de l'avion, il n'a pas à les trifouiller. Pour instaurer une telle contrainte, on dit que les attributs sont privés, et c'est primordial. C'est l'un des piliers fondamentaux de la POO.
    dans un tutorial que j'utilise pour apprend le poo.

  20. #20
    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 727
    Points
    10 727
    Par défaut
    Le principe est exactement le même pour la POO : l'utilisateur de la classe doit se contenter d'invoquer les méthodes en ignorant les attributs. Il s'en fiche : comme le pilote de l'avion, il n'a pas à les trifouiller. Pour instaurer une telle contrainte, on dit que les attributs sont privés, et c'est primordial. C'est l'un des piliers fondamentaux de la POO.
    c'est un peu n'importe quoi et c'est un avis personnel,
    dans ce cas la, par exemple la class DOMDocument serai fausse puisque elle a des attribut en public, si ca existe c'est pas pour rien

Discussions similaires

  1. [XL-2013] Erreur sur code pour copier-coller en valeur
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/01/2015, 10h55
  2. Erreur gestion excel via code VBA dans access pour importation
    Par blacklolou dans le forum VBA Access
    Réponses: 4
    Dernier message: 11/01/2013, 11h24
  3. plusieurs erreurs de code pour faire 2 totaux après une selection
    Par aprentizorrrr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/06/2010, 23h29
  4. Gestion erreur dans module de class E97
    Par Eric_03 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/12/2008, 17h45
  5. [Cookies] Erreur de code pour un site multilangue
    Par MaTTuX_ dans le forum Langage
    Réponses: 2
    Dernier message: 25/08/2007, 23h23

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