alors voilà mon problème, j'ai une classe Personnage comprenant les attributs privés suivants: $_id;$_nom;$_force;$_degats;$_niveau;$_experience;
j'y ai mis les getters et les setters correspondant, une méthode hydrate modifiant les attributs selon un array, un constructeur appelant la méthode hydrate.
Cet objet fonctionne parfaitement.
j'ai une table personnages dans ma base de données comprenant id(int, auto increment),nom(varchar 255), force(int),degats(int),niveau(int),experience(int).
J'ai voulu créer un objet PersonnagesManager gérant la table personnages. Et c'est là où ça coince, je n'arrive pas à ajouter un personnage dans la base de données.
voici les codes correspondants :
Personnage.class.php
<?php
class Personnage
{
private $_id;
private $_nom;
private $_force;
private $_degats;
private $_niveau;
private $_experience;
public function __construct(array $donnees)
{
$this->hydrate($donnees);
}
public function hydrate(array $donnees)
{
foreach($donnees as $key => $value)
{
$method = 'set'.ucfirst($key);
if(method_exists($this,$method))
{
$this->$method($value);
}
}
}
public function getId(){return $this->_id;}
public function getNom(){return $this->_nom;}
public function getForce(){return $this->_force;}
public function getDegats(){return $this->_degats;}
public function getNiveau(){return $this->_niveau;}
public function getExperience(){return $this->_experience;}
public function setId($id)
{
$this->_id = (int) $id;
}
public function setNom($nom)
{
if(is_string($nom) && strlen($nom) <= 30)
{
$this->_nom = $nom;
}
}
public function setForce($force)
{
$force = (int) $force;
if($force >= 0 && $force <= 100)
{
$this->_force = $force;
}
}
public function setNiveau($niveau)
{
$niveau = (int) $niveau;
if($niveau >= 0)
{
$this->_niveau = $niveau;
}
}
public function setExperience($exp)
{
$exp = (int) $exp;
if($exp >= 0 && $exp <= 100)
{
$this->_experience = $exp;
}
}
}
PersonnagesManager.class.php
<?php
class PersonnagesManager
{
private $_db;
public function __construct($db)
{
$this->setDb($db);
}
public function add(Personnage $perso)
{
echo 'ajout d\'un personnage dans la bdd';
$q = $this->_db->prepare('INSERT INTO personnages(`nom`,`force`,`degats`,`niveau`,`experience`) VALUES(:nom,:force,:degats,:niveau,:experience)');
$q->bindValue(':nom',$perso->getNom());
$q->bindValue(':force',$perso->getForce(),PDO::PARAM_INT);
$q->bindValue(':degats',$perso->getDegats(),PDO::PARAM_INT);
$q->bindValue(':niveau',$perso->getNiveau(),PDO::PARAM_INT);
$q->bindValue(':experience',$perso->getExperience(),PDO::PARAM_INT);
$q->execute();
}
public function update(Personnage $perso)
{
$q = $this->_db->prepare('UPDATE personnages SET nom = :nom, `force` = :force, degats = :degats, niveau = :niveau, experience = :experience WHERE id=:id');
$q->bindValue(':nom',$perso->getNom());
$q->bindValue(':force',$perso->getForce(),PDO::PARAM_INT);
$q->bindValue(':degats',$perso->getDegats(),PDO::PARAM_INT);
$q->bindValue(':niveau',$perso->getNiveau(),PDO::PARAM_INT);
$q->bindValue(':experience',$perso->getExperience(),PDO::PARAM_INT);
$q->bindValue(':id',$perso->getId(),PDO::PARAM_INT);
$q->execute();
}
public function delete(Personnage $perso)
{
$this->_db->exec('DELETE FROM personnages WHERE id = '.$perso->getID());
}
public function get($id)
{
$id = (int) $id;
$q = $this->_db->query('SELECT * FROM personnages WHERE id ='.$id);
$donnees = $q->fetch(PDO::FETCH_ASSOC);
return new Personnage($donnees);
}
public function getList()
{
$q = $this->_db->query('SELECT * FROM personnages ORDER BY nom');
$persos = array();
while($donnees = $q->fetch(PDO::FETCH_ASSOC))
{
$persos[] = new Personnage($donnees);
}
return $persos;
}
public function setDb(PDO $db)
{
$this->_db = $db;
}
}
index.php
<?php
function chargerClasse($classe)
{
require $classe . '.class.php';
}
spl_autoload_register('chargerClasse');
$perso = new Personnage(array(
'nom' => 'Vyse',
'force' => 6,
'degats' => 60,
'niveau' => 5,
'experience' => 20
));
$db = new PDO('mysql:host=localhost;dbname=test','root','');
echo $perso->getForce();
$manager = new PersonnagesManager($db);
$manager->add($perso);
?>
6 et ajout d\'un personnage dans la bdd sont bien indiqués, mais rien ne se passe au niveau de ma table personnage. Je travaille sur wamp, avez-vous une solution?