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 :

valeur de bin2hex() différente lors qu’enregistré dans MySQL


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2017
    Messages : 17
    Points : 16
    Points
    16
    Par défaut valeur de bin2hex() différente lors qu’enregistré dans MySQL
    Bonjour à tous voici mon petit soucis que je ne trouve pas des réponse depuis un moment ....

    j'ai cette function qui me permet de créer un token et de l'enregistré dans ma base de donné. Cette enregistrent est par la suite utilisé dans mon serveur WSS pour authentifier un utilisateur.

    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
    38
    39
    40
    41
     
    public static function getToken()
        { 
          $token = bin2hex(random_bytes(64));
          // $token = 'teste';
          $idUser = session::sessionData("idUserActif");
          $ip = $_SERVER['REMOTE_ADDR'];
     
     
          $bd = bdApp::getConnection();
     
          $sql = 'SELECT * FROM '.self::tableWsToken.' WHERE idUser = :idUser';
     
              $req = $bd->prepare($sql);
     
              $req->execute(array(':idUser' =>$idUser));
     
              // si un enregsitrment contien l'id d'utilisateur on update
              if($req->rowCount() > 0)
              {
                $sql = 'UPDATE '.self::tableWsToken.' SET token = :token ,ip = :ip WHERE idUser = :idUser ';
     
                $req = $bd->prepare($sql);
     
     
                $req->execute(array(':idUser' => $idUser, ':token' =>$token,':ip' => $ip));
     
              }
     
              //si aucun enregsitrement contien l Id user on créer un nouvelle enregistrment
              else
              {
                $sql = 'INSERT INTO '.self::tableWsToken.'(idUser,token,ip) VALUES  (:idUser,:token,:ip)';
     
                $req = $bd->prepare($sql);
     
                $req->execute(array(':idUser' => $idUser, ':token' =>$token,':ip' => $ip));
              }
     
          return $token;
        }
    mon problème est que le token n'est pas le même une fois enregistré dans ma bd je ne comprend vraiment pas pourquoi? quand j'utilise un simple texte comme teste tout marche parfaitement par contre. Si quelqu'un peu m'expliqué pourquoi j'aimerai bien comprendre mon erreur en souhaitant quelle ne sois pas toute bête !!!! Merci à l'avance !

  2. #2
    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
    Salut,

    je me demande si l'injection de valeurs binaires dans un statment est aussi simple que ça ?
    Il doit y avoir un truc avec l'échappement effectué par PDO sur des valeurs binaires, cela doit différer d'une chaîne de caractères brut.
    Je n'ai pas le temps de tester, mais creuse cette voie.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Question bête : quel est le type de la colonne TOKEN dans la table ?
    Pour continuer dans la lignée de la piste donnée par rawsrc, il faut peut-être préciser le type de la donnée en utilisant PDOStatement::bindParam (ou bindValue)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2017
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Pour le champ de token il à été testé sur plusieurs type mais ne donnant pas les résultats escomptés. Presentement en varchar 255 comme dans le manuel php il est ecrit que bin2hex retourne une chaine string je ne penssais pas avoir un traitement special à faire je vais voir de ce côté merci si d'autre piste je suis preneur !

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Effectivement, bin2hex retourne une chaine, donc le résultat devrait être stockable dans un champ de type VARCHAR (ou équivalent)

    Comment détermines-tu que le token est "différent dans la base" ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2017
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    La valeur de token est envoyé dans le code de ma page html et dans la bd lorsque je les compare visuellement ils ne sont pas les meme la chaine à changé dans la base de donné. De plus quand je fait un var dump avant et apres mon enregistrement avec un exit pour etre sur sa ne vienne pas d ailleur j'ai les meme valeur sur le var dump mais different de ce que j'ai en base de donné. Ensuite en ajoutant seulement la valeur teste a token mon authentification sur mon node serveur fonctionne parfaitement!

Discussions similaires

  1. Eviter doublon lors enregistrement dans mysql
    Par bricoreur dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 29/03/2018, 15h22
  2. Inserer des valeurs de type null, integer, varchar dans MySQl DB via VBA
    Par ca_adrien dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/02/2018, 09h05
  3. Comment envoyer la valeur d'un bouton radio dans MySQL
    Par michka999 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 18/08/2006, 18h08
  4. Autoriser les valeurs infinies dans MySQL 5
    Par elitost dans le forum Requêtes
    Réponses: 6
    Dernier message: 07/01/2006, 23h30
  5. Récupérer des valeurs de checkbox dans MySQL
    Par digger dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 05/09/2005, 14h58

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