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ération de données, conception


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut Récupération de données, conception
    Bonjour à tous,

    j'essaye de me faire une petite appli pour apprendre la POO en PHP mais je fais face a un problème de conception.
    Mon programme sert a gérer des seances de musculation.
    sur ma BD j'ai 3 tables: Seance, Série et Exercice.
    En PHP j'ai égaelment 3 classes du même nom ainsi que 3 classes Manager (modèle)

    Ma question concerne la récupération complète d'une séance. donc la liste des series et exercices effectués
    Ma première idée était de faire la requete avec les jointures dans la classe ManagerSeance de cette sorte
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT s.*, e.*, se.* FROM seance s INNER JOIN serie se ON se.idSeance = s.id INNER JOIN exercice e ON e.id = se.idExercice
    Cette solution marche mais n'est pas très POO puisque cela m'oblige a créer des attributs de serie et exercice dans la classe séance ...

    Exemple avec mes classes serie et ManagerSerie. Ma classe série se retrouve avec des attributs d'exercices...
    Classe serie
    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
    <?php
    class serie{
    	private $_id;
    	private $_idExercice;
    	private $_nom; // nom de l'exercice
    	private $_idSeance;
    	private $_rep;
    	private $_charge;
     
    	function __construct(array $donnees){
    		/*$this->_id = 1;
    		$this->_idExercice = 1;
    		$this->_idSeance = 1;
    		$this->_reps = 10;
    		$this->_charge = 100;*/
    		$this->hydrate($donnees);
    	}
    	public function getIdExercice(){
    		return $this->_idExercice;
    	}
    	public function setIdExercice($idExercice){
    		$this->_idExercice = (int) $idExercice;
    	}
    	public function getNom(){
    		return $this->_exercice;
    	}
    	public function setNom($exercice){
    		if (is_string($exercice) && strlen($exercice) <= 30)
    	    {
    	      $this->_nom = $exercice;
    	    }
    	}
     
    	public function getIdSeance(){
    		return $this->_idSeance;
    	}
    	public function setIdSeance($idSeance){
    		$this->_idSeance = (int) $idSeance;
    	}
     
    	public function getRep(){
    		return $this->_rep;
    	}
    	public function setRep($rep){
    		$this->_rep = (int)$rep;
    	}
     
     
    	public function getCharge(){
    		return $this->_charge;
    	}
    	public function setCharge($charge){
    		$this->_charge = (int)$charge;
    	}
     
    	public function addSerie(Serie $serie/*$exo,$rep,$poids*/){
    		//$this->_series[count($this->_series)] = ['exo'=>$exo,
    		//				'rep'=>$rep,
    		//				'poids'=>$poids];
     
    	}
     
    	#Initialisation d'un objet
    	public function hydrate (array $donnée){
    		foreach ($donnée as $key => $value){
    			$method = 'set'.ucfirst($key); #première lettre en majuscule
     
    			if (method_exists($this, $method)){
    				$this->$method($value);
    			}
    		}
    	}	
     
    }
    ?>
    Classe serieManager
    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
    <?php
    class serieManager{
    	private $_db;
     
     
    	function __construct($db){
    		$this->setDB($db);
    	}
    	public function setDB(PDO $db){
    		$this->_db = $db;
    	}
     
    	public function addSerie(Serie $serie){
    		var_dump($series);
     
    		try{
    			$req = $this->_db->prepare('INSERT INTO serie(idExercice, idSeance,charge,rep) VALUES(:idExercice, :idSeance, :charge, :rep)');
    			$req->bindValue(':idExercice',$serie->getIdExercice(),PDO::PARAM_INT);
    			$req->bindValue(':idSeance',$serie->getIdSeance(),PDO::PARAM_INT);
    			$req->bindValue(':charge',$serie->getCharge(),PDO::PARAM_INT);
    			$req->bindValue(':rep',$serie->getReps(),PDO::PARAM_INT);
     
    			$req->execute();
    		}catch(PDOException $e){
    			$log = fopen('serie.log','r+');
    			fputs($log, $e);
    			fclose($log);
    		}
    	}
     
    	//Retourne une seule série
    	public function getSerie($id){
    		$req = $this->_db->query('SELECT * FROM serie WHERE id = '.$id);
    		$donnee = $req->fetch(PDO::FETCH_ASSOC);
    		var_dump($donnee);
     
    		return new serie($donnee);
    	}
     
    	public function getListSerie(){
    		$req = $this->_db->query('SELECT s.*, e.* FROM serie s INNER JOIN exercice e ON s.idExercice = e.id ');
     
    		while($donnee = $req->fetch(PDO::FETCH_ASSOC)){
    			$series = new serie($donnee);
    		}
     
    		return $series;
    	}
     
    }
     
     
    ?>
    Quel est donc la meilleure façon de procéder ?

    Merci d'avance, je ne sais pas si je suis très claire ...

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bon j'avance un petit peu dans mon code !
    dans ma classe série, j'ai une methode pour récupérer l'exercice correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public function getExercice(){
    		/*$db = new PDO('mysql:host=localhost;dbname=sport', 'root', 'azerty');
    		$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); */
    		$manager = new exerciceManager();
    		return $manager->get($this->_idExercice);
     
    	}
    Petit problème, je ne sais pas comment appeler le managerExercice sans déclarer un objet PDO dans la classe serie ?

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    En PHP tu as Doctrine qui pourra te mettre sur les rails, c'est un ORM
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    merci pour ton retour.
    EN effet j'ai entendu parler des ORM mais je souhaiterais d'abord réalisé une appli sans ça avant de me lancer dans les Framework,ORM ...

    Oui je suis chiant lol

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Et bien moi qui pensais avoir un probleme tout bete

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 252
    Points : 649
    Points
    649
    Par défaut Toujours besoin d'aide ?
    Bonne idée ton appli. Sinon je pense que cette discu est dans le mauvais forum. Il y en a un dédié à la BDD !

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/04/2015, 22h35
  2. [Conception] Récupération de données
    Par Angelik dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/12/2006, 07h19
  3. [ DB2] => [ORACLE] Récupération de données
    Par LeDid dans le forum DB2
    Réponses: 3
    Dernier message: 25/06/2003, 17h10
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 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