Forum Clubic

Accès à une bdd avec php objet

Bonjour à tous.

Je suis en train de faire ce tuto du site du zero (il s’agit de la première partie nommée “Une entité, un objet”). Le but est d’accéder aux données d’une BD.

Voici mon script:



Class Personnage
	{
		private $_id;
        private $_nom;
        private $_forcePerso;
        private $_degats;
        private $_niveau;
        private $_experience;
		
		public function id()
			{
				return $this->_id;
			}
		
		public function nom()
			{
				return $this->_nom;
			}
			
		public function forcePerso()
			{
				return $this->_forcePerso;
			}
			
		public function degats()
			{
				return $this->_degats;
			}
		
		public function niveau()
			{
				return $this->_niveau;
			}
			
		public function experience()
			{
				return $this->_experience;
			}
		
	}

$base = mysql_connect ('localhost', 'root', '');  
mysql_select_db ('perso', $base);

$sql = 'SELECT * FROM table';

$req = mysql_query($sql) or die('Il y a une erreur SQL <br />'.$sql.'<br />'.mysql_error());

while ($donnees = mysql_fetch_assoc($req))
	{
		print_r($donnees);
		
		$perso = new Personnage($donnees);
		
		echo $perso->nom();
		
	}


Rien ne s’affiche. Le problème vient de l’instanciation de la classe mais franchement je ne vois vraiment pas pourquoi.
Merci ^^

Plutôt logique, enfin :

  1. Je suppose que ta table contient des données
  2. Si le print_r affiche quelque chose, mais pas $perso, alors :

C’est ta façon de construire l’objet qui n’est pas bonne.
Tu crées l’objet, en passant le tableau en paramètre, mais tu ne fais rien dans le constructeur. Du coup, la méthode nom() renvoie la valeur par défaut, soit null, vide, etc.

=>

public function __construct(array $data) {
  $this->_id = $data['id']; 
  ... etc ...
}

A noter que le siteduzéro te propose ça sous la forme de la méthode hydrate() (traduit plutôt salement en “hydrater” © avis perso) et avec les setters (mais bon, moi perso, je considère que les données venant de la base sont valides, et qu’il n’y a pas de vérifications à faire).

Merci beaucoup, ça fonctionne ^^

Bonne soirée