Bonsoir,

Je dispose de base de la class Personnage :

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; }
}
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 : 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 !';
    }
}
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
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 : 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 :
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));
    }
Résultat : Mon nom est bien affiché !
Nom : Capture.JPG
Affichages : 99
Taille : 28,2 Ko


- En envoyant uniquement le nom 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
 
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 ?
Nom : Capture.JPG
Affichages : 107
Taille : 56,7 Ko

Merci beaucoup de votre aide !