je suis en train de réaliser un petit exercice qui consiste à simplement rentrer un nom et un objet dnas une base de données mysql.
j'ai deux fichiers, un manager et une class character.
"Tout se passe bien" je n'ai pas de message d'érreur à ceci prêt que le champ nom dans la base de données reste à 0 si ne rentre pas une variable numérique.
J'avoue ne jamais avoir rencontré se type d'érreus
voici mes différents codes;
le manager
Code : Tout sélectionner
<?php
class charManager
{
private $_db;
// SETTER
public function __construct($db)
{
$this->setDb($db);
}
public function setDb(PDO $db)
{
$this->_db = $db;
}
public function addChar(character $char)
{
$q=$this->_db->prepare('INSERT INTO personnages (name,damage) VALUES (:name,:damage)');
$q->bindValue(':name',$char->getName(),PDO::PARAM_INT);
$q->bindValue(':damage',$char->getDamage(),PDO::PARAM_INT);
$q->execute();
}
public function delChar(character $char)
{
$q->prepare('DELETE FROM personnages WHERE id =' . $char->getId());
}
public function uptChar(character $char)
{
$q=$this->_db->prepare('UPDATE personnages SET name=:name,damage=:damage WHERE id = :id');
$q ->bindValue(':name', $char->getStrength(),PDO::PARAM_INT);
$q ->bindValue(':damage', $char->getName(),PDO::PARAM_INT);
$q ->execute();
}
public function readChar($id)
{
$id = (int) $id;
$q = $this->query('SELECT * FROM personnages WHERE id =' . $id);
$data = $q->fetch(PDO::FETCH_ASSOC);
return new char($data);
}
}la classe character
Code : Tout sélectionner
<?php
include 'manager.php';
class character
{
private $_damage;
private $_name;
//fonctions
public function __construct($data)
{
$this->hydrate($data);
}
public function hydrate(array $data)
{
foreach ($data as $key => $value)
{
$method = 'set'.ucfirst($key);
if (method_exists($this, $method))
{
$this->$method($value);
}
}
}
public function hit($char)
{
$char->setDamage(5);
}
//getter
public function getName()
{
return $this->_name;
}
public function getDamage()
{
return $this->_damage;
}
//setter
public function setDamage($damage)
{
if(!is_int($damage) OR $damage > 100 OR $damage < 1)
{
trigger_error('Critical Error damage value is not a correct value');
}
$this->_damage = $damage;
}
public function setName($name)
{
$name = (string) $name;
$this->_name = $name;
}
}
$char = new Character([
'name' => "salur", 'damage' => 5
]);
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$db = new PDO('mysql:host=localhost;dbname=poo;charset=utf8', 'root', '',$pdo_options);
$manager = new charManager($db);
$manager -> addChar($char);
Cordialement