Bonsoir,

J'ai un petit problème que je ne parviens pas à résoudre j'aurais besoin d'un peu d'aide.
J'initialise une Class héritant de classe qui hérite eux-mêmes d'autre classe, puis je serialize cette Class dans un $SESSION["customer"].
Il n'y a pas d'erreur jusqu'ici tous ce passe bien.Une fois arriver dans une autre page je récupère donc ma variable $SESSION["customer"] pour unserialize le problème et qu'il me retourne un __PHP_Imcomplete_Class_Name.

Je vais tenter de vous exposer au mieux mon projet pour que vous puissiez comprendre au mieux :

Tout d'abord voici la structure actuel du projet :
Nom : Capture.PNG
Affichages : 83
Taille : 13,8 Ko

Ensuite voici le code de chaque fichier :

index.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
<?php
include_once "partials/header.phtml";
include_once 'www/index.phtml';
include_once "partials/footer.phtml";
index.phtml :
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
if (!isset($_SESSION["customer"])) { /* Déconnecter */
    ?>
 
    <section>
        <div class="vertical-align">
            <div class="container">
                <div class="row">
                  <ul class="tab-group">
                      <li id="co-link" class="tab active"><a href="#signup">Inscription</a></li>
                      <li id="register-link" class="tab"><a href="#login">Connexion</a></li>
                  </ul>
                    <div id="signup" class="col-lg-12 col-md-12 col-xs-12 form-group">
                        <form action="php/checkLogin.php" method="post">
 
                            <div class="form-group">
                                <label>Pseudo</label>
                                <input type="text" class="form-control" name="pseudo" required="required">
                            </div>
 
                            <div class="form-group">
                                <label>Email</label>
                                <input type="email" class="form-control" name="email" required="required">
                            </div>
 
                            <div class="form-group">
                                <label>Mot de passe</label>
                                <input type="password" class="form-control" name="password"  required="required">
                            </div>
 
                            <div class="form-group">
                            <label>Confirmation du mot de passe</label>
                                <input type="password" class="form-control" name="password-repeat" required="required">
                            </div>
 
                            <button class="btn btn-primary" type="submit" name="register-form">Je m'inscris!</button>
 
                        </form>
 
                    </div>
 
                    <div id="login" class="col-lg-12 col-md-12 col-xs-12 form-group ghost">
                        <form action="php/checkLogin.php" method="post">
 
                            <div class="form-group">
                                <label>Pseudo ou Email</label>
                                <input type="text" class="form-control" name="pseudo_or_mail_login" required="required">
                            </div>
 
                            <div class="form-group">
                                <label>Mot de passe</label>
                                <input type="password" class="form-control" name="password_login" required="required">
                            </div>
 
                            <p><a href="#">Mot de passe oublié ?</a></p>
 
                            <input class="btn btn-primary" type="submit" name="login_form" value="Connexion">
 
                        </form>
 
                    </div>
 
                </div>
 
            </div>
 
        </div> 
    </section>
       <link rel="stylesheet" href="css/index.css">
<?php } else { ?> <!-- CONNECTER -->
  <div class="container">
    <div class="row">
    ici les ressources
    </div>
     <div class="row">
        <div class="col-lg-2 col-md-3 col-xs-12 vertical-menu-left"> <!-- Menu de Gauche -->
            <a href="?page=vuedensemble" >Vue d'ensemble</a>
            <a href="?page=ressources" >Ressources</a>
            <a href="?page=installation" >Installation</a>
            <a href="?page=marche" >Marché</a>
            <a href="?page=marchand" >Marchand</a>
            <a href="?page=recherche" >Recherche</a>
            <a href="?page=chantierspatial" >Chantier spatial</a>
            <a href="?page=defense" >Défense</a>
            <a href="?page=flotte" >Flotte</a>
            <a href="?page=galaxie" >galaxie</a>
            <a href="?page=alliance" >Alliance</a>
        </div>
        <div class="col-lg-2 col-md-3 col-xs-12 vertical-menu-right"> <!-- Menu de droite -->
            <?php
 
            $test = unserialize($_SESSION["customer"]);
 
            ?>
      </div>
    </div>
<?php } ?>
c_customerSQL.php :
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
<?php
 
if( empty(session_id()) ){ session_start(); }
 
/**
 * \brief Class c_customerSQL qui représente un utilisateur qui hérite de cConnectDb et qui permet de faire des requêtes en base de donnée sur la table t_customer
 * \author Jordan Barbé
 * \version 0.1
 */
 
include_once "c_zone.php";
 
/**
 * Class c_customerSQL
 */
class c_customerSQL extends c_zone
{
    /* Variable Privée */
 
    /**
     * Nom de l'utilisateur
     */
    private $ms_lastName;
 
    /**
     * Prénom de l'utilisateur
     */
    private $ms_firstName;
 
    /**
     * Mot de passe de l'utilisateur
     */
    private $ms_passWord;
 
    /**
     * Adresse email de l'utilisateur
     */
    private $ms_email;
 
    /**
     * Age de l'utilisateur
     */
    private $mi_age;
 
    /**
     * Nom de la table en rapport avec cette class
     */
    private $ms_tableName;
 
    /**
     * Pseudo de l'utilisateur
     */
    private $ms_pseudo;
 
    /**
     * Date de création du compte de l'utilisateur
     */
    private $ms_date_creation;
 
    /**
     * Date d'anniversaire
     */
    private $ms_birthday;
 
    /**
     * Contient l'ID unique de l'utilisateur
     */
    private $mi_id;
 
    /* Fonction Public */
 
    /**
     * c_customerSQL constructor.
     * \param $_passWord Mot de pass de l'utilisateur
     * \param $_email Adresse email de l'utilisateur
     */
    public function __construct($s_passWord = NULL, $s_email = NULL, $s_firstName = NULL, $s_lastName = NULL, $i_age = 0, $s_pseudo = NULL)
    {
        $this->ms_passWord      = $s_passWord;
        $this->ms_email         = $s_email;
 
        $this->ms_firstName     = $s_firstName;
        $this->ms_lastName      = $s_lastName;
        $this->mi_age           = $i_age;
        $this->ms_pseudo        = $s_pseudo;
        $this->ms_date_creation = 0;
        $this->mi_id            = 0;
 
        $this->ms_tableName     = T_CUSTOMER;
 
        parent::__construct();
    }
 
    /**
     * \fn public function _addCustomer() ajouter un utilisateur en base de données
     * \brief _addCustomer Permet d'ajouter un utilisateur
     * \return une exception en cas d'erreur
     */
    public function _addCustomer()
    {
        $this->_writeLogBeg(__function__, __line__, __file__);
 
        try {
            if ($this->_customerExist() == true) {
                $this->_writeLogError(__function__ . " - " . CUSTOMER_EXIST, __line__, __file__);
                $this->_writeLogEnd(__function__, __line__, __file__);
                return false;
            } else {
                $this->_runSQL(sprintf("INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s)
                                                VALUE ('$this->ms_email', '$this->ms_passWord', '$this->ms_pseudo', '$this->ms_firstName', '$this->ms_lastName', $this->mi_age, NOW())", T_CUSTOMER, EMAIL, PASSWORD, PSEUDO, FIRST_NAME, LAST_NAME, AGE, DATE_CREATION));
 
                $this->_CustomerInit();
 
                $this->_writeLog(__function__ . " - " . CUSTOMER_CREATED, __line__, __file__);
            }
        } catch (Exception $error) {
            $this->_writeLogError(__function__ . " - " . $error->getMessage(), __line__, __file__);
        }
 
        $this->_writeLogEnd(__function__, __line__, __file__);
        return true;
    }
 
    /* Fonction privée */
 
    /**
     * \fn public function _customerExist()
     * \brief _customerExist Permet de regarder en base de donnée si un utilisateur est déjà renseigner
     * \return true si l'utilisateur et déjà en base de donnée sinon false
     */
    public function _customerExist()
    {
        $this->_writeLogBeg(__function__, __line__, __file__);
 
        $result = NULL;
 
        $result = $this->_runSQL(sprintf("SELECT * from %s where %s = '%s' or %s = '%s'", T_CUSTOMER, EMAIL, $this->ms_email, PSEUDO, $this->ms_pseudo));
        $row    = mysqli_fetch_assoc($result);
 
        if (!$row) {
            $this->_writeLogEnd("Customer not exist - ".__function__, __line__, __file__);
 
            return false;
        }
        $this->_writeLogEnd("Customer exist - ".__function__, __line__, __file__);
 
        return true;
    }
 
    /**
     * \fn private function _customerInit()
     * \brief _customerInit() permet d'initialiser les variables membre de la class
     */
    private function _customerInit()
    {
        $this->_writeLogBeg(__function__, __line__, __file__);
 
        $result = $this->_runSQL(sprintf("SELECT * from %s a inner join %s b ON a.%s = b.%s inner join %s c ON b.%s=c.%s inner join %s d ON b.%s=d.%s where %s = '%s' or %s = '%s' or %s = '%s'",
            T_CUSTOMER,
            T_ZONE,
            ID,
            ID_CUSTOMER_ZONE,
            T_RESSOURCES,
            ID_ZONE,
            ID_ZONE_RESSOURCES,
            T_MINE,
            ID_ZONE,
            ID_ZONE_MINE,
            EMAIL,
            $this->ms_email,
            PSEUDO,
            $this->ms_pseudo,
            ID,
            $this->mi_id));
        $row = mysqli_fetch_assoc($result);
 
        if (!$row){
            $this->_writeLogEnd("Init fail ".__function__, __line__, __file__);
            exit;
        }
 
        // T_customer
        $this->ms_email         = $row[EMAIL];
        $this->ms_pseudo        = $row[PSEUDO];
        $this->mi_id            = $row[ID];
        $this->ms_date_creation = $row[DATE_CREATION];
        $this->ms_passWord      = $row[PASSWORD];
        $this->ms_firstName     = $row[FIRST_NAME];
        $this->ms_lastName      = $row[LAST_NAME];
        $this->mi_age           = $row[AGE];
        $this->ms_birthday      = $row[BIRTHDAY];
 
        $this->_zoneInit($row);
 
        $this->_writeLogEnd(__function__, __line__, __file__);
 
        return $this;
    }
 
    /**
     * \fn public function _customerConnected()
     * \brief _customerConnected Permet de récupérer le mot de passe en bdd puis le comparer avec le mot de passe de la class
     * \return true si le mot de passe est bon sinon false
     */
    public function _customerConnected()
    {
        $this->_writeLogBeg(__function__, __line__, __file__);
 
        $result = $this->_runSQL(sprintf("SELECT %s from %s where %s = '%s' or %s = '%s'", PASSWORD, T_CUSTOMER, EMAIL, $this->ms_email, PSEUDO, $this->ms_pseudo));
        $row = mysqli_fetch_assoc($result);
 
        if (!$row || !(password_verify($this->ms_passWord, $row['password']))) {
            $this->_writeLogEnd("Customer not connected - " . __function__, __line__, __file__);
 
            return false;
        }
 
        /** initialise les variables de session en fonction de l'utilisateur connecté **/
        $this->_CustomerInit();
 
        $this->_writeLogEnd("Customer connected - " . __function__, __line__, __file__);
        return true;
    }
 
    /** Getter **/
 
    /**
     * \fn public function getLastName()
     * @return mixed
     */
    public function getLastName()
    {
        return $this->ms_lastName;
    }
 
    /**
     * \fn public function getEmail()
     * @return mixed
     */
    public function getEmail()
    {
        return $this->_email;
    }
 
    /**
     * \fn public function getAge()
     * @return mixed
     */
    public function getAge()
    {
        return $this->_age;
    }
 
    /**
     * \fn public function getFirstName()
     * @return mixed
     */
    public function getFirstName()
    {
        return $this->_firstName;
    }
 
    /**
     * \fn public function getPseudo()
     * @return mixed
     */
    public function getPseudo()
    {
        return $this->_pseudo;
    }
 
    /**
     * \fn public function getDateCreation()
     * @return mixed
     */
    public function getDateCreation()
    {
        return $this->_date_creation;
    }
 
    /**
     * \fn public getId()
     * @return mixed
     */
    public function getId()
    {
        return $this->_id;
    }
 
    /**
     * \fn public getPassword()
     * @return mixed
     */
    public function getPassword()
    {
        return $this->_passWord;
    }
}
checkLogin.php :
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
 
include_once "class/c_log.php";
include_once "class/c_customerSQL.php";
//include_once "../partials/header.phtml";
 
if( empty(session_id()) ){ session_start(); }
 
$log = new c_log();
 
if (array_key_exists("register-form", $_POST)) {
 
    try {
        if (preg_match(" /^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/ ", $_POST["email"])) {
            $email = $_POST["email"];
        } else {
            throw new Exception("Vous utilisez un mauvais format d'email");
        }
 
        //if (preg_match('/^[a-zA-Z]{4,27}[0-9]{0,3}$^', $_POST["pseudo"])) {
            $pseudo = $_POST["pseudo"];
        //} else {
        //    throw new Exception("Veuillez n'utiliser que des caractères alphanumériques pour votre pseudo");
        //}
 
        if (preg_match('#^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).{6,}$#', $_POST["password"])) {
            if ($_POST['password'] === $_POST['password-repeat']) {
                $password = $_POST["password"];
                $password_hash = password_hash($password, PASSWORD_DEFAULT );
            } else {
                throw new Exception ("Les mots de passe doivent être identiques");
            }
        } else {
            throw new Exception ("Votre mot de passe doit contenir au mois une lettre minuscule et majuscule, un chiffre et un caractère spécial");
        }
 
        $customer = new c_customerSQL($password_hash, $email, NULL, NULL, 0, $pseudo);
 
        if ($customer->_addCustomer() == true)
            $_SESSION["customer"] = serialize($customer);
        else {
            throw new Exception ("Vous avez déjà un compte.");
        }
    } catch (Exception $e) {
        $_SESSION["errors"] = $e->getMessage();
 
        $log->_writeLogError($_SESSION["errors"], __line__, __file__);
    }
    header('Location: ../index.php');
    exit();
}
 
if (array_key_exists("login_form", $_POST)) {
    try {
        $login = new c_customerSQL($_POST["password_login"], $_POST["pseudo_or_mail_login"], NULL, NULL, 0, $_POST["pseudo_or_mail_login"]);
 
        if ($login->_customerExist() == true &&
            $login->_customerConnected() == true) {
            $_SESSION["customer"] = serialize($login);
        }else {
            throw new Exception ("Pseudo/Email et ou Mot de passe incorrect.");
        }
    } catch (Exception $e) {
        $_SESSION["errors"] = $e->getMessage();
 
        $log->_writeLogError($_SESSION["errors"], __line__, __file__);
    }
    header('Location: ../index.php');
    exit();
}
 
if (array_key_exists( "disconnect", $_GET)) {
    if ($_SESSION["customer"])
    {
        unset($_SESSION["customer"]);
        header('Location: ../index.php');
        exit();
    }
}
 
unset($log);
 
include_once "../www/index.phtml";
En debug on peux voir clairement le problème :

Nom : Capture.PNG
Affichages : 77
Taille : 39,8 Ko
Je n'ai pas partagé chaque fichier de mon projet car je pense inutile. Si besoin je peux les partager.

J'initialise donc ma class dans le fichier checkLogin.php à la ligne 58, puis j'essaye de unserialize() dans mon fichier index.phtml à la ligne 92.

Si besoin de précision n'hésiter pas. Si vous avez des remarques sur mon code aussi .

J'espère avoir été assez clair.

Merci à vous ! bonne soirée.