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

PHP & Base de données Discussion :

Requête sensible a la casse [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut Requête sensible a la casse
    Bonsoir, j'ai un petit soucis quand je veux voir si un pseudo existe dans ma base de donnée, ma requete est sensible a la casse, la requete preparé est lié au traitement javascript; j'ai la même requete quand le formulaire est envoyer pour refaire des verifications et elle fonctionne correctement. (interclassement: utf8_general_ci)
    Si quelqu' un a une petite idée

    code js
    Code javascript : 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
    if(texte = file('verifpseudo.php?pseudo='+escape(lepseudo)))
    {
      if(texte == 1)
      {
         writediv_pseudo('<p class="icone_inscription"><img src="/images/icone_no.png" /><p class="message_inscription_erreur">Ce pseudo est  déjà utilisé par un membre, veuillez en choisir un autre</p>');
      }
      else if(texte == 2)
      {
        pseudo.style.borderColor = "#a0a0a0";	
        writediv_pseudo('<p class="icone_inscription"><img src="/images/icone_ok.png" /></p>');
      }	
      else
      {
        writediv_pseudo(texte);
      }
    }


    page verifpseudo.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
    <?php
    $son_pseudo = htmlspecialchars($_GET["pseudo"]);
    /*$son_pseudo = strtolower($son_pseudo);*/
     
    $repons = $bdd->prepare('SELECT COUNT(*) AS nbr_pseudo FROM membres WHERE LOWER(login) = LOWER(:pseudo) '); // On compte le nombre de login qui ont la même valeur que celle rentré à l'instant par l'utilisateur.
    $repons->bindValue('pseudo',$son_pseudo , PDO::PARAM_STR);
    $repons->execute();
     
    	$free_pseudo = ($repons->fetchColumn()==0)?1:0;
     
    $repons->closeCursor();
     
    if(!$free_pseudo){echo "1";}
    else{echo "2";}
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tes pseudos sont stockés avec des entités HTML ? Si oui c'est une drôle d'idée.
    Egalement tu pourrais utiliser XMLHttpRequest plutôt qu'un bidouillage.

    Sinon je ne vois pas ce qui rendrait ton test sensible à la casse, as-tu debugué un peu pour voir a quel niveau de ton code commençait le problème ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Tes pseudos sont stockés avec des entités HTML ? Si oui c'est une drôle d'idée.
    Egalement tu pourrais utiliser XMLHttpRequest plutôt qu'un bidouillage.
    Du tout, htmlspecialchars() n'a rien a faire la et j'utilise XMLHttpRequest.

    En effet j'ai debugué et j'ai pu remonté au problème.. ca a mis le temps mais j'ai trouvé, merci quand même pour ta réponse

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    ma requete est sensible a la casse
    Le fonctionnement que tu as ne s'y prêterait pas pour une table sensible à la casse, mais plutôt insensible à la case (utf8_general_ci).

    Le simple fait de devoir utiliser la fonction LOWER() coté SQL serait un signe comme quoi ...

    Imaginons le scénario suivant.
    Au départ un internaute s'inscrit avec très exactement le pseudo suivant : éric
    Donc dans la BDD "éric" sera enregistré, même en appliquant la fonction LOWER().

    Quelques jours plus tard, ce même internaute, pas très au fait des ces histoire de "casses" au passage, a la mauvaise idée de saisir Eric comme pseudo lors de la phase d'identification.
    Et bien au niveau de la requête SQL, il sera recherché "eric" et non "éric".
    -> eric n'étant pas équivalent à éric, la requête SQL renverra rien, ou pire, trouvera un résultat qui ne correspondra pas à cet internaute, mais un autre (pas loin d'être une usurpation d'identité lié à un bug du programme/Site Web à mon sens).


    A mon sens il vaudrait mieux s'orienter vers du insensible à la casse, et considérer que (en reprenant cet exemple) éric, eric, Éric, Eric, eRic etc, etc ... sera pour un seul et unique internaute.
    En somme, ne pas pouvoir enregistrer 2 personnes différentes, une avec Eric et une autre avec eRiC, etc ...


    Maintenant, je peux me tromper, faut voir
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ou le plus simple : utiliser un email en guise de login.

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Ou le plus simple : utiliser un email en guise de login.
    +1

    D'ailleurs, se baser sur 1 seule donnée, qui plus est un pseudo c'est hyper risqué.
    Au minimum, et pour une seule donnée, on impose un chaine la plus aléatoire possible, encore que ...

    Ca risque fort d'être un jeu d'enfant de s'identifier à la place d'un autre, ça peu même être un jeu tout court, bonjour la réputation après


    De mon coté je suis plus adepte d'exploiter au moins 2 données, ne serait-ce que pour augmenter les improbabilités.
    mail + pseudo, qui n'est qu'autre que le fonctionnement que quasi tous font (login/pass).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

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

Discussions similaires

  1. Requête sensible à la casse
    Par GillesV dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/08/2012, 12h47
  2. Sensible a la casse?
    Par Adeel.dev dans le forum SDL
    Réponses: 1
    Dernier message: 16/05/2010, 04h23
  3. Inséré dans une table ACCESS sensible a la casse ?
    Par Luffy_San dans le forum Modélisation
    Réponses: 7
    Dernier message: 21/01/2008, 10h21
  4. sql sensible a la casse?
    Par fantazya_z dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/09/2007, 22h18
  5. requête SQL un peu casse tête
    Par hellbilly dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/12/2005, 10h03

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