Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    avril 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : avril 2012
    Messages : 94
    Points : 15
    Points
    15

    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 :
    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 :
    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 Vincent
    Inscrit en
    juillet 2005
    Messages
    19 827
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 19 827
    Points : 26 108
    Points
    26 108

    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 ?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    avril 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : avril 2012
    Messages : 94
    Points : 15
    Points
    15

    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
    Expert Confirmé Avatar de RunCodePhp
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 964
    Points : 3 676
    Points
    3 676

    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 118
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 118
    Points : 7 217
    Points
    7 217

    Par défaut

    Ou le plus simple : utiliser un email en guise de login.
    # Dans la Création, tout est permis mais tout n'est pas utile...

  6. #6
    Expert Confirmé Avatar de RunCodePhp
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 964
    Points : 3 676
    Points
    3 676

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •