Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je travaille actuellement sur un site d'une communauté des jeux électroniques , j'ai réalisé un système d'inscription, le mot de passe est crypté pour garder une certaine confidentialité, or, quand j'envoie les données vers la base (BDD) une erreur se propage indiquant que l'encodage des caractères n'est pas supporté par le type de la colonne "mot_passe".
Le problème survient sûrement du cryptage de mot de passe.
Voici l'erreur que j'obtiens :
"Echec de la requête ERROR: invalid byte sequence for encoding "UTF8": 0xe4597a HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding"."
Merci à vous tous!!
Dernière modification par Tackichi (27/06/2009 21:38:24)
Hors ligne
Ça peut venir de cette colonne comme d'une autre. Tout ce que ce message indique, c'est que vous essayez d'insérer des données dont les caractères n'existent pas en UTF-8. Si en effet, les données ne sont pas de l'UTF-8, il faut préciser l'encodage grâce au paramètre client_encoding.
Guillaume.
Hors ligne
Merci,
je sais que le message d'erreur indiqué survient de la colonne mot_passe parce que quand je désactive le cryptage à partir du script php les données sont insérées, malheureusement la documentation de php ne mentionne pas l'encodage retourné par le cryptage, mais elle indique que la colonne doit être en type Tinyblob ou tinytext sur Mysql
Dernière modification par Tackichi (28/06/2009 01:19:03)
Hors ligne
Est ce que l'algorithme d'encryption génère du (vrai) texte ou bien une série d'octets ?
Habituellement, les algos génèrent soit une clé binaire, qu'il sera impossible de stocker dans un champ TEXT, vu qu'il ne passera pas les contrôles, soit une version base64 ou quelque chose comme ça, qui ne contient que des caractères 'basiques' (comme A-Z,a-Z,0-9,+,=).
=> Que génère l'algo ?
Si c'est le premier cas, il faut le stocker dans un bytea (ou lui faire subir un encodage base4 avant de le mettre dans le champ text, mais ca prendra davantage de place)
Si c'est le second cas (j'en doute), ça doit marcher d'entrée.
Marc.
Hors ligne
Merci,
Ce que je savais que le vecteur d'initialisation pour l'algorithme choisi génère une série de 8 octets soit 64 bits , alors que ces bits seront combinés avec les données (mot de passe) pour avoir un bloc de données crypté à la forme 0xe4597a, 0x82 ou 0xfc .
Normalement ça doit marcher avec un type text comme vous l'avez mentionné ci-dessus, mais impossible de transmettre les données.
Hors ligne
vu la forme, ca ne ressemble pas à du texte, mais à une suite d'octets. Essayez plutôt un bytea :
http://docs.postgresqlfr.org/8.4/datatype-binary.html
Marc.
Hors ligne
Le problème n'est pas tellement de savoir si c'est du texte ou pas. À partir du moment où cela ne correspond pas à l'encodage de la base de données, vous ne pourrez pas l'enregistrer dans un champ de type text (ou varchar ou char). Donc en partant de ce principe, le mieux est de faire comme l'indique Marc : une colonne de type bytea.
Guillaume.
Hors ligne
Le problème n'est pas tellement de savoir si c'est du texte ou pas. À partir du moment où cela ne correspond pas à l'encodage de la base de données, vous ne pourrez pas l'enregistrer dans un champ de type text (ou varchar ou char). Donc en partant de ce principe, le mieux est de faire comme l'indique Marc : une colonne de type bytea.
Effectivement j'ai transtypé la colonne en Bytea, et j'ai protégé les caractères comme indiqué dans la doc , alors mes données sont enregistrées :d
Merci
Hors ligne
Pages : 1