Bonsoir,
Je dispose de base de la class Personnage :
Mon routeur dispose d'un formulaire où l'on peut entrer un nom, et ceci va récupérer les informations sur le personnage depuis une méthode getPerso() dans la classe PersonnagesManager :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Personnage { private $_id, $_name, $_damage; const ITS_ME = 1; const PERSO_DEAD = 2; const PERSO_HIT = 3; public function name() { return $this->_name; } }
On peut le présenter comme suit :
Si l'utilisateur veut utiliser un personnage déjà existant :
Si $perso est définie, alors on peut afficher la page d'informations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // If want use a character elseif(isset($_POST['use']) && isset($_POST['name'])) { if($manager->exist($_POST['name'])) { $perso = $manager->getPerso($_POST['name']); } else { $message = 'Ce personnage n\'existe pas !'; } }
Dans ma class PersonnagesManager je dispose de la méthode vu précédement qui est getPerso() et qui se présente comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 if(isset($perso)) { print_r($perso); ?> <p><a href="?deconnexion=1">Déconnexion</a></p> <fieldset> <legend>Mes informations :</legend> <p> Nom : <strong><?php echo htmlspecialchars($perso->name()); ?></strong><br/> Dégats : <strong><?php echo $perso->damage(); ?></strong> </p> </fieldset> <fieldset> <legend>Qui frapper ?</legend> <p> <?php $persos = $manager->getListPerso($perso->name()); if(empty($persos)) { echo 'Personne à frapper !'; } else { foreach($persos as $onePerso) { echo "<a href='?hit=" . $onePerso->id() . "'>" . htmlspecialchars($onePerso->name()) . "</a> Dégats : (" . $onePerso->damage() . ")<br/>"; } } ?> </fieldset> <?php } else { ?> <form action="" method="post"> <p> Nom : <input type="text" name="name" maxlength="50" /> <input type="submit" value="Create Character" name="create" /> <input type="submit" value="Use Character" name="use" /> </p> </form> <?php } ?>
---------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public function getPerso($info) { $column = is_int($info) ? 'id' : 'namePerso'; $q = $this->_db->prepare('SELECT id, namePerso, damage FROM personnages WHERE ' . $column . '=:' . $column); $q -> bindValue(':' . $column, $info); $q -> execute(); return new Personnage($q->fetch(PDO::FETCH_ASSOC)); }
Le problème est : Que lorsque je crée mon personnage, tout se passe bien et $perso->name() (son nom) est bien affiché, mais quand je me déconnectes et souhaites utiliser ce dernier, je n'arrive pas à récupérer son nom ! Et les autres infos sont bien récupérés pourtant !
J'ai pratiquer quelques tests :
- En affichant le nom directement dans la classe ce qui me donne :
Résultat : Mon nom est bien affiché !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public function getPerso($info) { $column = is_int($info) ? 'id' : 'namePerso'; $q = $this->_db->prepare('SELECT id, namePerso, damage FROM personnages WHERE ' . $column . '=:' . $column); $q -> bindValue(':' . $column, $info); $q -> execute(); $donnees = $q -> fetch(PDO::FETCH_ASSOC); echo $donnees['namePerso']; exit(); //return new Personnage($q->fetch(PDO::FETCH_ASSOC)); }
- En envoyant uniquement le nom comme suit :
Résultat : Il me retourne bien le nom et l'affiche mais du coup les autres informations ne sont plus disponibles ? Comment est-ce possible ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public function getPerso($info) { $column = is_int($info) ? 'id' : 'namePerso'; $q = $this->_db->prepare('SELECT id, namePerso, damage FROM personnages WHERE ' . $column . '=:' . $column); $q -> bindValue(':' . $column, $info); $q -> execute(); $donnees = $q -> fetch(PDO::FETCH_ASSOC); return new Personnage(['name' => $donnees['namePerso']]); //return new Personnage($q->fetch(PDO::FETCH_ASSOC)); }
Merci beaucoup de votre aide !
Partager