-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchangerMotDePasse.php
254 lines (225 loc) · 7.68 KB
/
changerMotDePasse.php
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
<?php
//-----------------------------
// Script pour le changement de mot de passe d'un compte d'utilisateur.
//-----------------------------
require_once(realpath(__DIR__).'/php/biblio/foncCommunes.php');
$js = array();
$css = array();
$css[] = 'formulaire.css';
$js[] = 'changerMotDePasse.js';
$titre = 'LogiKek - Changement de mot de passe';
$description = 'Site de vente de système d\'exploitation';
$motCle = 'OS, Linux, Windows, BSD, Apple, RHEL, Vente, logiciel';
$valide = true;
global $maBD;
global $hasher;
//Tableau contenant les différents messages d'erreur qui seront affichés.
$messages = array();
//-----------------------------
// Fonction qui valide des données selon le patron
// spécifié par une regex.
//
// $regex est la regex, $champ la donnée à validé
// $message un message d'erreur à afficher lorsque la validation échoue
//
// Retourne false si la validation échoue, true dans le cas contraire.
//-----------------------------
function validationChamp($regex, $champ, $message)
{
//Teste le champ avec la regex, s'il échoue:
if (!preg_match($regex, $champ))
{
global $messages;
global $valide;
//Rajoute un message d'erreur à l'array messages.
$messages[] = $message;
//La validation du formulaire à échoué.
$valide = false;
return false;
}
return true;
}
//Si l'utilisateur est déjà authentifié
if (isset($_SESSION['authentification']))
{
//On peut assumé qu'un objet client est enregistré sous la variable de SESSION et on le récupère.
$client = $_SESSION['client'];
//On arrive du bouton valider, changement du mot de passe à valider.
if (isset($_POST['valider']))
{
//Tableau pour contenir les données entré par l'utilisateur
$tabMotPasse = array();
//Désinfecte les données de l'utilisateur.
foreach ($_POST as $cle => $valeur)
{
$tabMotPasse[$cle] = desinfecte($valeur);
}
//Mot de passe: au moins 5 caractères max 10 parmi lettres et chiffres
validationChamp("/^[a-zàáâéèêîíìôòóùúûç0-9]{5,10}$/iu", $tabMotPasse['mdpNouveau'], 'Nouveau mot de passe: entre 5 et 10 caractères. Lettre et chiffres seulement.');
if(validationChamp("/^[a-zàáâéèêîíìôòóùúûç0-9]{5,10}$/iu", $tabMotPasse['mdpConfirmer'], 'Confirmation du nouveau mot de passe: entre 5 et 10 caractères. Lettre et chiffres seulement.'))
{
//Mot de passe de confirmation n'est pas le même que le mot de passe
if ($tabMotPasse['mdpConfirmer'] != $tabMotPasse['mdpNouveau'])
{
$messages[] = 'Confirmation du nouveau mot de passe: N\'est pas identique au nouveau mot de passe.';
$valide = false;
}
}
//Mot de passe actuel est le même que le nouveau mot de passe.
//On se fit à la valeur des champs plutôt que de vérifier en BD.
if ($tabMotPasse['mdpActuel'] == $tabMotPasse['mdpNouveau'])
{
$messages[] = 'Le nouveau mot de passe et le mot de passe actuel sont les mêmes.';
$valide = false;
}
//Récupère un array avec les données du compte client si le nom d'utilisateur existe.
$resultat = $maBD->selectClient($client->getNomUtilisateur());
//Vérifie le mot de passe
$correct = $hasher->CheckPassword($tabMotPasse['mdpActuel'], $resultat['motDePasse']);
//Si faux, alors ne concorde pas.
if (!$correct)
{
$messages[] = 'Le mot de passe actuel est incorrect.';
$valide = false;
}
//Vérifie si chacun des champs est set et non vide.
//Si oui, on met le message correspondant qui signal un champs requis.
foreach ($tabMotPasse as $key => $value)
{
if (empty($value))
{
//Inutile d'afficher tout les messages d'erreur si c'est un cas où un champ est vide.
//Vide messages et la réinitialise.
unset($messages);
$messages = array();
$messages[] = 'Un ou plusieurs champs sont vides.';
$valide = false;
break;
}
}
//Si le changement de mot de passe est valide, on procède à la modification en BD.
if ($valide)
{
//Hash le nouveau mot de passe.
$hash = $hasher->HashPassword($tabMotPasse['mdpNouveau']);
if ($hash == '*')
throw new Exception('Erreur de hash.');
//Modifie le mot de passe sur l'objet client.
$client->setMotDePasse($hash);
//Enregistre client dans la variable de SESSION
$_SESSION['client'] = $client;
$nbrLigneJour;
try
{
//Modifie le mot de passe du compte client dans la bd.
$nbrLigneJour = $maBD->updateMotDePasse($client);
}
catch (Exception $e)
{
exit();
}
}
}
}
//Si nous tentons de naviguer à la page de changerMotDePasse sans être authentifié
else
{
//Redirection à la page d'authentification.
header("location:./authentification.php?prov=changerMotDePasse");
exit();
}
require_once("./header.php");
require_once("./sectionGauche.php");
?>
<!-- Début section central col-md-9 -->
<div class="col-md-7" id="centre">
<!-- Début du formulaire -->
<div class="row">
<?php if (!$valide): //Affiche tout les messages d'erreur si la validation a échoué.?>
<div class="alert alert-danger" role="alert">
<i class="fa fa-exclamation-triangle"></i>
<?php foreach ($messages as $message):?>
<p><?php echo $message; ?></p>
<?php endforeach; ?>
</div>
<?php elseif(isset($_POST['valider'])): //Si la validation a réussis et que le formulaire à déjà été envoyé, alors affiche un message de succès.?>
<div class="alert alert-success" role="alert">
<i class="fa fa fa-check"></i>
<p>Changement de mot de passe fait avec succès.</p>
</div>
<?php endif; ?>
<form id="formChangementMotDePasse" onsubmit="return validerChamps(this);" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<table>
<tbody>
<tr>
<td class="centrer" colspan="2">
<h3>Saisissez les données</h3>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<!-- Mot de passe actuel -->
<tr>
<td class="droit">
<label for="mdpActuel">Mot de passe actuel:</label>
</td>
<td>
<input type="password" id="mdpActuel" name="mdpActuel">
</td>
</tr>
<!-- Nouveau mot de passe -->
<tr>
<td class="droit">
<label for="mdpNouveau">Nouveau mot de passe:</label>
</td>
<td>
<input type="password" id="mdpNouveau" name="mdpNouveau">
</td>
</tr>
<!-- Confirmation du nouveau mot de passe -->
<tr>
<td class="droit">
<label for="mdpConfirmer">Confirmation du mot de passe:</label>
</td>
<td>
<input type="password" id="mdpConfirmer" name="mdpConfirmer">
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td class="centrer" colspan="2">
<input type="submit" name="valider" value="Changer le mot de passe">
</td>
</tr>
</tbody>
</table>
</form>
<!-- Fenêtre modal pour afficher les messages d'erreur de validation côté client. -->
<div id="modalErreur" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Contenu-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<!-- Titre -->
<h4 class="modal-title">Erreur</h4>
</div>
<div class="modal-body"></div>
<div class="modal-footer">
<!-- Bouton de fermeture -->
<button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button>
</div>
</div>
</div>
</div>
<!-- Contenu principal -->
</div> <!-- Fin des produits -->
</div> <!-- Fin section central col-md-9 -->
<div class="col-md-1"> <!-- Début Section de droite central -->
</div>
<!-- Fin section de droite central -->
</div>
<?php require_once('./footer.php'); ?>