2 pièce(s) jointe(s)
Objet non retourné depuis une requête sql
Bonsoir,
Je dispose de base de la class Personnage :
Code:
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; }
} |
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 :
On peut le présenter comme suit :
Si l'utilisateur veut utiliser un personnage déjà existant :
Code:
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 !';
}
} |
Si $perso est définie, alors on peut afficher la page d'informations :
Code:
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
}
?> |
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:
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 :
Code:
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));
} |
Résultat : Mon nom est bien affiché !
Pièce jointe 521393
- En envoyant uniquement le nom comme suit :
Code:
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));
} |
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 ?
Pièce jointe 521401
Merci beaucoup de votre aide !