Page 1 sur 1

Programation orienté objet, nom qui ne s'insère pas dans la database

Posté : 08 août 2019, 00:41
par noobprog
Salut
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);
Un grand merci à ceux qui prendront le temps de m'aider ...
Cordialement

Re: Programation orienté objet, nom qui ne s'insère pas dans la database

Posté : 08 août 2019, 01:00
par or 1
$q->bindValue(':name',$char->getName(),PDO::PARAM_INT);
vouloir un entier comme nom et passer le nom "salur", c'est incohérent.

Re: Programation orienté objet, nom qui ne s'insère pas dans la database

Posté : 08 août 2019, 13:55
par noobprog
SAlut,
Tu veux dire que bindVAlue n'accepte que les int ?

Re: Programation orienté objet, nom qui ne s'insère pas dans la database

Posté : 08 août 2019, 14:04
par Saian
Salut, avec un PDO::PARAM_INT en troisième paramètre, oui la fonction s'attend à recevoir un int.
https://www.php.net/manual/fr/pdostatem ... dvalue.php paramètre data_type
https://www.php.net/manual/fr/pdo.constants.php liste des constantes pour le paramètre data_type

Je vois aussi que lors de l'update tu bind la force sur le nom et le nom sur les dégâts et avec toujours le même paramètre PDO::PARAM_INT ce qui va surement te poser des problèmes également.

Re: Programation orienté objet, nom qui ne s'insère pas dans la database

Posté : 08 août 2019, 14:30
par noobprog
Merci beaucoup pour tout ces éclaircissements

SAns toi j'y serai resté un sacré paquet de temps, Encore merci !!!