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 :

Récupérer les valeurs de ma requête via une class


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Par défaut Récupérer les valeurs de ma requête via une class
    Bonsoir à tous,

    J'essaye de comprendre la programmation POO, j'ai créer une class qui a plusieurs fonction. Mon code base fonctionne le voici :

    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
    public function setId($id){$this->id = $id;}
     
    public function affComm(){
            $db =Database::connect();
            $db->exec("SET CHARACTER SET utf8");
            if($this->id ===''){
                $stmt = $db->prepare("SELECT * FROM communication");
            }
            else{
                $stmt = $db->prepare("SELECT * FROM communication where id = :id ");
                $stmt->bindValue(":id",$this->id,PDO::PARAM_INT);
            }
            $stmt->execute();
            $comm = $stmt->fetchall();
            $stmt->closeCursor();
            return $comm;
        }
    Par contre, si je veux sortir uniquement les valeurs de deux champs et les récupérer via mes getters ça ne fonctionne plus. Voici mon code :

    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
        public function setId($id){$this->id = $id;}
     
        public function getNom(){return $this->nom;}
        public function setNom($nom){$this->nom = $nom;}
     
        public function getCorps(){return $this->corps;}
        public function setCorps($corps){$this->corps = $corps;}
     
     
    public function affComm(){
            $db =Database::connect();
            $db->exec("SET CHARACTER SET utf8");
            if($this->id ===''){
                $stmt = $db->prepare("SELECT * FROM communication");
            }
            else{
                $stmt = $db->prepare("SELECT * FROM communication where id = :id ");
                $stmt->bindValue(":id",$this->id,PDO::PARAM_INT);
            }
            $stmt->bindParam(':nom', $this->nom,PDO::PARAM_STR); //J'essaye de récupérer une valeur et de l'affecter à son getter.
            $stmt->bindParam(':corps', $this->corps,PDO::PARAM_STR);//J'essaye de récupérer une valeur et de l'affecter à son getter.
            $stmt->execute();
            // $this->nom   = $comm['nom']; // Ne fonctionne pas nom plus
            // $this->corps = $comm['corps'];// Ne fonctionne pas nom plus
            $comm = $stmt->fetchall();
            $stmt->closeCursor();
            return $comm;
        }
    J'aimerai soit afficher tout, soit récupérer que certains éléments.

    À l'aide s' il vous plait, un tout grand merci d'avance

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Bonjour,

    Si tu veux apprendre la POO proprement, il faut d'abord que tu comprennes que la classe Communication n'a aucun rapport avec les requêtes sql, ceci dit qu'il faut créer une classe ManagerCommunication héritante de Communication et utiliser les namespaces.

    La première étapte est de créer des dossiers :
    dossier principale "app" et à l'intérieur tu crées 3 dossiers : bdd,Classes et Managers puis utilise ce code :

    Classe Communication, dossier (app/Classes)
    Code php : 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
    namespace app\Classes;
    class Communication{
        protected $id,$nom,$corps;
        public function __construct($array=null){
              if(is_array($array))//si c'est un tableau, on initialise les propriétés en fonction de ses clés/valeurs 
                  foreach($array as $prop=>$value){
    		   $method='set'.ucfirst($prop);
    		   if(method_exists($this,$method)){
    			$this->$method($value);
    		   }
    	       }
        }
        /*Les getters/setters*/
        public function getId(){return $this->id;}
        public function setId($id){$this->id = $id;}
        public function getNom(){return $this->nom;}
        public function setNom($nom){$this->nom = $nom;}
        public function getCorps(){return $this->corps;}
        public function setCorps($corps){$this->corps = $corps;}
       /* il faudrait aussi ajouter les méthodes magiques comme __set() et __get() ....*/
    }

    ManagerCommunication, dossier(app/Managers/):
    Code php : 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
    namespace app\Managers;
    class ManagerCommunication extends \app\Classes\Communication{
      public function __construct(\app\Classes\Communication $comunication=null){
          /*Constructeur que tu peux utiliser soit avec un Objet Communication en paramètre ou rien */		
      }
      public static function affComm(\app\Classes\Communication $c=null){
            $db =\app\bdd\Database::connect();
            $db->exec("SET CHARACTER SET utf8");
            if(empty($c)){
                $stmt = $db->query("SELECT * FROM communication");
    	    $comm = $stmt->fetchAll(\PDO::FETCH_CLASS,parent::class);
            }
            else{
                $stmt = $db->prepare("SELECT * FROM communication where id = :id ");
                $stmt->bindValue(":id",$c->getId(),\PDO::PARAM_INT);
                //execute seulement pour les requêtes ayant un paramètre, sinon query est suffisante.
    	    $stmt->execute();
    	    $comm=$stmt->fetchObject(parent::class);
            }
            $stmt->closeCursor();
            return $comm;
        }
    }

    Classe Database, dossier (app/bdd/)
    Code php : 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 
    namespace app\bdd{
    	use \PDO;
    	class Database extends \PDO{
    		private  static $driver;
    		public static function connect(){
    			if(empty(self::$driver)){
    			    self::$driver=new \PDO('mysql:host=localhost;dbname=test;charset=utf8','root',''
    				 ,[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=> PDO::FETCH_OBJ]
                                );
    			}
    			return self::$driver;
    		}
    	}
    }

    Page index.php pour tester le code :
    Code php : 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
     
    <?php 
    //activer l'affichage des erreurs/avertissements :
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
     
    //un autoloader classique :
    spl_autoload_register(function ($class) {
    	require $class.'.php';
    });
     
    $db=\app\bdd\Database::connect();
    $dbMng=new \app\Managers\ManagerCommunication();
     
    foreach($dbMng::affComm() as $comm){
    	echo '<br />comm id :'.$comm->getId()."<br />"
    	.'comm nom :'.$comm->getNom()."<br />"
    	.'comm corps :'.$comm->getCorps().'<br />';
    }
    /* Pour un Object Communication existant dans la bdd et ayant l'id 1 */
    $oneCom=new \app\Classes\Communication(["id"=>1]);
    $getOne=$dbMng->affComm($oneCom);
    ?>
    <b>Infos sur l'objet existant id=1 :</b><br />
    Id :<?=$getOne->getId();?><br />
    Nom :<?=$getOne->getNom();?><br />
    Corps :<?=$getOne->getCorps();?>

  3. #3
    Membre habitué
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Par défaut
    Bonjour Toufik83,

    Un tout grand merci pour ton aide, j'apprécie très fortement, je vais me pencher sur ton code ce soir. Cela à l'air complexe pour moi mais bien structuré, cela va demander un petit travail d'analyse.

    As-tu un site ou un livre de référence à me conseiller pour continuer dans ma démarche, même en anglais

    Encore un tout grand merciiiiiii

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Bonjour,

    Pour les livres je ne sais pas trop, mais les cours PHP POO existent partout puisque c'est du open source....

    Ce n'est même pas la peine de chercher loin, voilà un article sur le site Developpez,

  5. #5
    Membre habitué
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Par défaut
    Bonjour,

    Un tout grand merci pour aide, je me rencontre qu'il y a encore du travail. Mais cela m'a déjà bien aidé et surtout permis de voir beaucoup plus claire.

    À bientôt et bonne journée

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Stu76bel Voir le message
    As-tu un site ou un livre de référence à me conseiller
    https://www.eyrolles.com/Informatiqu...9782212673999/très bien fait.

    Article d'un expert : https://www.developpez.net/forums/bl...nis-php-objet/

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 25/06/2006, 23h24
  2. Réponses: 1
    Dernier message: 07/06/2006, 18h56
  3. Problème pour classer les valeurs d'un champ
    Par AjJi dans le forum Access
    Réponses: 11
    Dernier message: 06/04/2006, 09h19
  4. Réponses: 1
    Dernier message: 03/12/2005, 12h24
  5. Réponses: 10
    Dernier message: 16/11/2005, 08h33

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