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

Langage SQL Discussion :

Requête COUNT foireuse ?


Sujet :

Langage SQL

  1. #1
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut 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 sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    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 averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    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 averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Sinon pas de piste sur le script en lui-même ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    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 averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    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 sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    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 averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Ok, un grand merci à toi pour ce dépannage matinal
    ->définiivement résolu

    Bonne journée

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    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 averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récuperer dans un formulaire le résultat d'une requête count
    Par jean-paul lepetit dans le forum IHM
    Réponses: 6
    Dernier message: 29/01/2007, 10h10
  2. Problème de requête count(*) avec DB2
    Par elsodiop dans le forum DB2
    Réponses: 3
    Dernier message: 30/11/2006, 16h11
  3. Requête count un peu chaud
    Par louroulou dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/06/2006, 14h43
  4. Requête Count(*)
    Par shr3dpit dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/05/2006, 15h21
  5. PB avec une requête Count
    Par Marion dans le forum ASP
    Réponses: 7
    Dernier message: 05/07/2004, 12h56

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