Bonjour,
J'ai un utilisateur enregistré avec username = albert et password = albert.Dans la bdd, le password est haché avec pasword_hash().
Coté serveur , la validation en php est faite et marche impeccablement.
Pour un feedback immédiat, lors de la connexion, j'utilise le plugin jqueryvalidation. Pour vérifier le username, çà se fait correctement. Mais pour le password, je trouve une sacrée difficulté avec le remote-method du plugin, car pour vérifier le password, il aura besoin aussi du username.
En comparant la validation du username et celle du password, je pense que le problème vient de la discordance entre la valeur password envoyée avec remote method (2 paramètres:password et username) et la formulation de ma requête sql (1 paramètre:password) .
Pouvez-vous m'éclairer sur la manière de procéder? L'erreur vient-elle du js (remote method) ou de la syntaxe de ma requête sql ?
Merci.
check_matching_username.php:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <form id="form_membre_cnx" action="" method="POST"> <div> <input name="username" id="username_input_cnx" type="text" autofocus> <label for="username_input_cnx" class="field__label">Username :</label> </div> <div class="field__message"></div> <div> <input name="password" id="password_input_cnx" type="password"> <label for="password_input_cnx" class="field__label">Password :</label> </div> <div class="field__message"></div> <button type="submit" name="submit_cnx" id="submit_cnx" class="button--full-width btn btn-primary">Log in</button> </form>
check_matching_password.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 <?php require_once('inc/db.php'); $req = $pdo->prepare('SELECT id FROM users WHERE username= ?'); $req->execute([$_POST['username']]); $user = $req->fetch(); if($user){ echo 'true'; }else { echo 'false'; } ?>
validation.js:
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 <?php require_once('inc/db.php'); //$req=$pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL '); //$req->execute( ['username'=> $_POST['username']]); $req = $pdo->prepare('SELECT id FROM users WHERE username=? AND password=?'); $req->execute([ $_POST['username'],$_POST['password'] ]); $user=$req->fetch(); if( password_verify($_POST['password'],$user['password'] ) ){ echo 'true'; }else{ echo 'false'; } ?>
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 $("#form_membre_cnx").validate({ errorElement: "span" ,errorPlacement: function(error, element) { error.appendTo( element.parent().next("div.field__message") ); } ,rules:{ username: { required: true ,remote: { url: "check_matching_username.php" ,type: "post" } } ,password: { required: true ,remote: { url: "check_matching_password.php" ,type: "post" ,data: { username:function(){ return $("#username_input_cnx").val(); } } } } } ,messages: { username:{ required: 'This field is required' ,remote: "Unknown username" } ,password:{ required: 'This field is required' ,remote: "The password is incorrect" } } });![]()
Partager