IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

jQueryValidation remote method pour vérifier concordance entre password tapé et celui présent dans la bdd


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Par défaut jQueryValidation remote method pour vérifier concordance entre password tapé et celui présent dans la bdd
    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.

    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_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
    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'; 
            }       
            
    ?>
    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
    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';
        }
        
    ?>
    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
    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"
    		}				
    	}
    });
    Nom : all.png
Affichages : 83
Taille : 72,5 Ko

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Par défaut
    Comme je le soupçonnais, l'erreur n'est pas du côté du plugin, ni de sa methode remote, mais plutôt de ma requête sql.
    voici la solution, et ainsi pour moi, le plugin jqueryvalidation marche à merveille:
    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 * FROM users WHERE username = :username ');
        $req->execute( ['username'=> $_POST['username']]);
        $user=$req->fetch();
        if(password_verify($_POST['password'],$user->password) ) {
            echo 'true'; 
        }else{
            echo 'false';
        }
        
    ?>
    À la prochaine !

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2016, 14h58
  2. [Batch] Vérifier si une chaine de caractères est présente dans un fichier
    Par jp_____ dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 23/08/2013, 10h40
  3. [MySQL] Problème pour afficher une image dont le chemin est stocké dans la bdd
    Par cel.Saint-Louis dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2007, 08h49
  4. Réponses: 11
    Dernier message: 23/03/2007, 19h38
  5. Réponses: 6
    Dernier message: 12/01/2007, 21h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo