Je suis en plein cours sur http://fr.openclassrooms.com/informatiq ... s-stockees
Et je n'arrive pas à afficher la liste de tous les personnages.
L'insertion d'un personnage ne se fait pas non plus.
Étant débutant, des explications (pour apprentis) seraient bien
Merci pour votre aide
index.php :
<?php
function chargerClasse($classe)
{
require $classe . '.class.php'; // On inclut la classe correspondante au paramètre passé.
}
spl_autoload_register('chargerClasse'); // On enregistre la fonction en autoload pour qu'elle soit appelée dès qu'on instanciera une classe non déclarée.
?>
<!DOCTYPE html>
<html>
<head>
<meta name="robots" content="noindex,nofollow" />
</head>
<body>
<?php
$perso = new Personnage(array(
'nom' => 'Victor',
'forcePerso' => 5,
'degats' => 0,
'niveau' => 1,
'experience' => 0
));
$db = new PDO('mysql:host=***;dbname=***', '***', '***');
$manager = new PersonnagesManager($db);
$manager->add($perso);
echo $manager->getList(); //Affiche la liste des personnages
?>
</body>
</html>
Personnage.class.php :
<?php
require_once('PersonnagesManager.class.php');
class Personnage
{
private $_id;
private $_nom;
private $_forcePerso;
private $_degats;
private $_niveau;
private $_experience;
public function hydrate(array $donnees)
{
foreach ($donnees as $key => $value)
{
$method = 'set'.ucfirst($key);
if(method_exists($this, $method))
{
$this->$method($value);
}
}
}
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; }
public function setId($id)
{
$id = (int) $id;
if($id > 0)
{
$this->_id = $id;
}
}
public function setNom($nom)
{
if(is_string($nom))
{
$this->_nom = $nom;
}
}
public function setForcePerso($forcePerso)
{
$forcePerso = (int) $forcePerso;
if($forcePerso >= 1 && $forcePerso <= 100)
{
$this->_forcePerso = $forcePerso;
}
}
public function setDegats($degats)
{
$degats = (int) $degats;
if($degats >= 0 && $degats <= 100)
{
$this->_degats = $degats;
}
}
public function setNiveau($niveau)
{
$niveau = (int) $niveau;
if($niveau >= 1 && $niveau <= 100)
{
$this->_niveau = $niveau;
}
}
public function setExperience($exp)
{
$exp = (int) $exp;
if($exp >= 1 && $exp <= 100)
{
$this->_experience = $exp;
}
}
}
PersonnagesManager.class.php :
<?php
require_once('Personnage.class.php');
class PersonnagesManager
{
private $_db;
public function __construct($db)
{
$this->setDb($db);
}
public function add(Personnage $perso)
{
$req = $this->_db->prepare('INSERT INTO personnages SET nom = :nom, forcePerso = :forcePerso, degats = :degats, niveau = :niveau, experience = :experience');
$req->bindValue(':nom', $perso->nom());
$req->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
$req->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
$req->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
$req->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
$req->execute();
}
public function delete(Personnage $perso)
{
$this->_db->exec('DELETE FROM personnages WHERE id = '.$perso->id());
}
public function get($id)
{
$id = (int) $id;
$req = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages WHERE id = '.$id);
$donnees = $req->fetch(PDO::FETCH_ASSOC);
return new Personnage($donnees);
}
public function getList()
{
$persos = array();
$req = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages ORDER BY nom');
while ($donnees = $req->fetch(PDO::FETCH_ASSOC))
{
$persos[] = new Personnage($donnees);
}
return $persos;
}
public function update(Personnage $perso)
{
$req = $this->_db->prepare('UPDATE personnages SET forcePerso = :forcePerso, degats = :degats, niveau = :niveau, experience = :experience WHERE id = :id');
$req->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
$req->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
$req->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
$req->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
$req->bindValue(':id', $perso->id(), PDO::PARAM_INT);
$req->execute();
}
public function setDb(PDO $db)
{
$this->_db = $db;
}
}