Bonjour les amis. J’ai un souci dans le chapitre 4 sur la manipulation des données stockées
. J’ai monté les fichiers des classes Personnage et PersonnagesManager. Puis dans mon fichier TestPersonnage j’ai écrit le code pour appeler la fonction add()
pour test, Mais je n’ai aucun résultat dans la base de données. Je souhaiterais comprendre ce qui se passe, car le code me semble très clair pourtant..
Quelqu’un peut m’aider? Je ne peux pas avancer sans résoudre ce problème..
Voici ma classe Personnage.class.php
<?php
class Personnage
{
private $_id;
private $_nom;
private $_forcePerso;
private $_degats;
private $_niveau;
private $_experience;
// Un tableau de donnees doit etre passe a la fonction -- d'ou le prefixe << array >>
public function hydrate(array $donnees)
{
foreach($donnees as $key => $val)
{
$method = 'set'. ucfirst($key); //uppercase first..
if(method_exists($this, $method)) // verifie si la methode existe..
{
$this->$method($val);
}
}
}
// Constructeur de la classe Personnage..
public function __construct(array $donnees)
{
$this->hydrate($donnees); // On hydrate notre objet ici..
}
// Liste des GETTERS..
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; }
// Liste des SETTERS..
public function setId($id)
{
// On convertit l'argument en entier..
$id = (int) $id;
// On verifie ensuite si ce nombre est positif..
if($id > 0)
{
$this->_id = $id;
}
}
public function setNom($nom)
{
// On verifie qu'il s'agit bien d'une chaine de caracteres..
if(is_string($nom) && strlen($nom) <= 30)
{
$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($experience)
{
$experience = (int)$experience;
if($experience >=1 && $experience <= 100)
{
$this->_experience = $experience;
}
}
}//fin classe
Voici ma classe PersonnagesManager.class.php
<?php
class PersonnagesManager
{
private $_db; // Attribut contenant l'instance de PDO.
public function __construct($db)
{
$this->setDb($db);
}
public function add(Personnage $perso)
{
// Preparation de la requete d'insertion
// Assignation des valeurs pour le nom, la force, les degats, l'experience
// et le niveau du personnage
// Execution de la requete.
$req = $this->_db->prepare('INSERT INTO personnage(nom, forcePerso, degats, niveau, experience)
VALUES (:nom, :forcePerso, :degats, :niveau, :experience)');
$req->execute(array(
'nom' => $perso->nom(),
'forcePerso' => $perso->forcePerso(),
'degats' => $perso->degats(),
'niveau' => $perso->niveau(),
'experience' => $perso->experience()
));
echo 'Ajout effectue avec succes !';
}
public function delete(Personnage $perso)
{
// Execute une requete de type DELETE.
$this->_db->exec('DELETE FROM personnage WHERE id = '. $perso->id());
}
public function get($id)
{
// Execute une requete de type SELECT avec une clause WHERE, et retourne un objet personnage.
$id = (int)$id;
$req = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnage
WHERE id = '. $id);
// Je stocke le resultat de la requete dans une varIABLE.. un tableau
$donnees = $req->fetch(PDO::FETCH_ASSOC);
return new Personnage($donnees);
}
public function getList()
{
// Reoturne la liste de tous les personnages.
$persos = array(); // tableau vide
$req = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnage
ORDER BY nom');
while($donnees = $req->fetch(PDO::FETCH_ASSOC))
{
$persos[] = new Personnage($donnees);
}
return $persos;
}
public function update(Personnage $perso)
{
// Prepare une requete de type UPDATE.
// Assignation des valeurs a la requete
// Execution de la requete.
$req = $this->_db->prepare('UPDATE FROM personnage SET forcePerso = :forcePerso, degats = :degats,
niveau = :niveau, experience = :experience WHERE id = :id');
$req->execute(array(
'forcePerso' => $perso->forcePerso(),
'degats' => $perso->degats(),
'niveau' => $perso->niveau(),
'experience' => $perso->experience()
)
);
}
public function setDb(PDO $db)
{
$this->_db = $db;
}
}
Et voici mon fichier TestPersonnage.php
<?php
function chargerClasse($classe)
{
require $classe.'.class.php'; // inlcure la classe correspondant au parametre passe..
}
spl_autoload_register('chargerClasse'); // on enregistre la fonction en autoload pour qu'elle
// soit appelee des qu'on instanciera une classe non declaree..
$perso = new Personnage([
'nom' => 'Victor',
'forcePerso' => 5,
'degats' => 0,
'niveau' => 1,
'experience' => 0
]);
// connexion a la BDD..
$db = new PDO('mysql:host=localhost;dbname=personnages', 'root', '');
$manager = new PersonnagesManager($db);
$manager->add($perso);
?>
HELP PLEASE!!
+0
-0