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

Langage SQL Discussion :

Requête COUNT foireuse ?


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Requête COUNT foireuse ?
    Bonjour,

    Sur la page d'inscription d'un site, je cherche à afficher un message d'alerte pour l'inscription d'un membre dans le cas où celui-ci utiliserait un mot de passe déjà pris par un autre utilisateur, et de fait stocké en BDD.
    J'ai pour cela couplé une fonction COUNT avec un fetchAll() sans succès. Le code ci dessous accepte tous les mdp sans restriction

    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
    <?php
    function add() {//controler : ajoute un membre en bdd sous réserve que celui-ci ne soit pas déjà utilisé
     
    	$manager = new Manager_Membre();
    	$_POST['pass'] = password_hash($_POST['pass'], PASSWORD_DEFAULT);//cryptage irréversible mdp utilisateur
     
    	if($manager->ifMdpExists($_POST['pass'])) {
    		echo 'ce mot de passe existe déjà';
    	} 
    	else {
    		$data_user = ['pseudo' => $_POST['pseudo'], 'pass' => $_POST['pass']];
    		$membre = new Membre($data_user);
     
    		$affectedLine = $manager->addMember($membre);
     
    		header('Location: index.php?action=index');
    	}
    }
     
     
    function ifMdpExists() {//Modele renvoie true ou false selon que le mdp est déjà pris par un autre utilisateur avec le transtypage booléen
    		$stmt = $this->_db->prepare('SELECT COUNT(*) FROM membres WHERE pass = :pass');
        	$stmt->execute(array('pass' => $_POST['pass']));
        	return (bool) $stmt->fetchColumn(2);//correspond à la colonne de mes mdp en bdd
    }


    Vous remerciant pour votre aide
    Olivier

  2. #2
    Expert éminent
    Bonjour,
    Que tu vérifies l'unicité d'un code utilisateur, login ou autre identifiant ne me pose pas de problème.

    Mais en quoi est-ce gênant que 2 utilisateurs aient le même mot de passe ?
    Surtout que c'est un moyen de trouver des mots de passes valides pour ton site…

    Maintenant, si un mot de passe (enfin un hash) est unique, il n'est pas nécessaire de faire un count. Un test d'existence suffit: tu auras au mieux 1 ligne dans la table.

    Tatayo.

  3. #3
    Membre habitué
    oui, c'est vrai qu'il n' y a rien de gênant en effet à ce que 2 utilisateurs aient le même pass. Je pourrais faire ce test sur le pseudo. En fait c'est plus pour me faire faire des exercices...Je peux du coup raisonner sur un test d'existence par rapport à l'id d'un membre
    je te remercie de cette piste de reflexion

  4. #4
    Membre habitué
    Sinon pas de piste sur le script en lui-même ?

  5. #5
    Expert éminent
    Là c'est plus un problème PHP que SQL.
    Peut-être une piste:
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    return (bool) $stmt->fetchColumn(2);

    Ta requête ne renvoie qu'une seule colonne, mais tu récupères la deuxième…

    Tatayo.

  6. #6
    Membre habitué
    Merci Tatayo de ton retour, effectivement j'ai ciblé la colonne 2 car elle contient les password. Ces derniers étant cryptés c'est sans doute pour cela que tous les password sont acceptés sans restrictions ?
    Désolé pour le post en SQL du coup...

  7. #7
    Expert éminent
    Il ne faut pas regarder les colonnes des tables utilisées dans la requête, mais les colonnes renvoyées par la requête (le SELECT).

    Tatayo.

  8. #8
    Membre habitué
    Ok, un grand merci à toi pour ce dépannage matinal
    ->définiivement résolu

    Bonne journée

  9. #9
    Expert confirmé
    Citation Envoyé par olivier252 Voir le message
    Sur la page d'inscription d'un site, je cherche à afficher un message d'alerte pour l'inscription d'un membre dans le cas où celui-ci utiliserait un mot de passe déjà pris par un autre utilisateur, et de fait stocké en BDD.
    Question bête, en quoi est-ce gênant de vouloir utiliser un mot de passe déjà existant, un login oui, mais un mot de passe ? Je n'ai jamais vu ce genre de restriction.

  10. #10
    Membre habitué
    Bonjour,
    En fait je cherche à créer un espace d'inscription et de connexion membre pour me faire un exercice étant débutant en php. je pense que le fait d'autoriser les mêmes mdp pouvait poser un problème de sécurité. C'est une erreur d'appréciation de débutant, il ne faut rien y voir de plus. C'est vrai qu'en revanche c'est beaucoup plus gênant du coup de ne pas restreindre les login. C'est pourquoi j'ai retravaillé cette petite fonctionnalité

    Cordialement