webmaster76 Posté 23 Janvier 2012 Partager Posté 23 Janvier 2012 Bonjour, Je developpe un site sous spip 2.1. J'utilise un formulaire de contact dans la partie public, un champs téléphone est présent dans ce formulaire. Voici le problème : lorsque qu'un visiteur remplit le champs téléphone avec son numéro et dans ce format: 0235653221 , le 0 disparait dans la base de donnée et dans le mail à l'administrateur. Je me suis documentée sur le sujet et cela serais du à une fonction sql_quote qui change les données du champs. Je ne sais pas ou trouver cette fonction dans le core de spip et encore moins la configurer pour éviter ça. Une ame charitable pourrait elle m'aider à régler ce problème ou le contourner...merci beaucoup. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick Posté 23 Janvier 2012 Partager Posté 23 Janvier 2012 Salut, si je ne dis pas de bétise, en mettant ton champ de bdd au format varchar au lieu d'un format numérique, le zéro ne devrait plus disparaitre. Il faut bien entendu que ton script envoie à la bdd le contenu de la variable correspondante au format string. La donnée sera ainsi interprétée comme une chaine de caractères et non pas un nombre entier. ++ Patrick Lien vers le commentaire Partager sur d’autres sites More sharing options...
webmaster76 Posté 23 Janvier 2012 Auteur Partager Posté 23 Janvier 2012 Salut, si je ne dis pas de bétise, en mettant ton champ de bdd au format varchar au lieu d'un format numérique, le zéro ne devrait plus disparaitre. Il faut bien entendu que ton script envoie à la bdd le contenu de la variable correspondante au format string. La donnée sera ainsi interprétée comme une chaine de caractères et non pas un nombre entier. ++ Patrick Bonjour et merci pour cette réponse! J'avais déjà mis mon champs de la bdd au format varchar mais toujours pas de 0. Par contre j'utilise un formulaire du plugin Forms and tables donc pour le script je ne sais pas trop ou cela peut se modifier si tu as une idée je suis preneuse. Je vais étudié la question. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ernestine Posté 23 Janvier 2012 Partager Posté 23 Janvier 2012 Je me suis documentée sur le sujet et cela serais du à une fonction sql_quote qui change les données du champs. La fonction sql_quote de SPIP ne fait qu'échapper les données pour éviter les injections SQL : ce n'est certainement pas elle qui te supprime ce zéro. Si le champ de la BDD est bien en varchar, et que dans ton formulaire le champ téléphone est un champ de type text, alors il est fort probable que la suppression du zéro soit faite au moment de la récupération des données (avant l'enregistrement en BDD), ce qui peut-être fait avec la fonction trim($truc, '0') par exemple... Il faudrait que tu trouves l'endroit où sont récupérées les données et voir comment est traité ce champ. Lien vers le commentaire Partager sur d’autres sites More sharing options...
webmaster76 Posté 23 Janvier 2012 Auteur Partager Posté 23 Janvier 2012 Bonjour, Merci pour cette nouvelle réponse tout d'abord. Dans un post sur le forum du plugin Form and tables, voici une réponse que j'ai trouvé pour ce problème : Le problème vient de lutilisation des structures standard de contrôle des requêtes SQL transmises : pour éviter les tentatives de hack, une fonction ["_q()" ou « sql_quote() »] protège les données envoyées : - si la chaîne est numérique, elle la transforme en nombre, - si la chaîne est formée de caractères alpha-numériques, elle lencadre de guillemets simples et « échappe » les apostrophes quelle pourrait contenir (lombre dun homme deviendra : l\ombre d\un homme ou lombre dun homme, selon la méthode déchappement prévue). Dans ton cas, « 0123456789 » apparaît comme un nombre... et sa valeur numérique est bien « 123456789 », doù lenregistrement dans la base sous cette forme. Pour éviter ce problème, la seule façon est de préciser dutiliser des espaces ou des points dans le numéro de téléphone : « 01.23.45.67.89 » ou « 01 23 45 67 89 » ou « 01 23 456 789 » seront bien enregistrés comme des chaînes de caractères alpha-numériques, tels quils ont été envoyés. Qu'en pensez-vous ? J'aimerais quand même donner la possibilité au visiteur de mettre leur numéro sans espace et sans . J'ai donc chercher du coté de cette fonction sql_quote mais apparement ce ne serait pas ça. Je vais donc essayer de voir du coté de la fonction TRIM Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ernestine Posté 24 Janvier 2012 Partager Posté 24 Janvier 2012 La fonction sql_quote effectue un échappement des données avant insertion en base. Encore une fois, ce n'est certainement pas elle qui va supprimer ce zéro initial ! Tu peux lire ça : http://programmer.spip.org/sql_quote et ça : http://doc.spip.org/@sql_quote Il n'est dit nulle part que sql_quote s'amuse à supprimer des zéros. Ils conseillent par ailleurs d'utiliser intval() pour les champs qui correspondent à des identifiants numériques. Essaie de voir si intval() a été utilisé au moment de la récupération/traitement des données. As-tu au moins localisé le fichier où ce traitement est effectué ? As-tu essayé de remplir le champ avec des données texte (au lieu d'un numéro) ? Si oui, ces données ont-elles correctement été enregistrées dans la base ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
webmaster76 Posté 24 Janvier 2012 Auteur Partager Posté 24 Janvier 2012 La fonction sql_quote effectue un échappement des données avant insertion en base. Encore une fois, ce n'est certainement pas elle qui va supprimer ce zéro initial ! Tu peux lire ça : http://programmer.spip.org/sql_quote et ça : http://doc.spip.org/@sql_quote Il n'est dit nulle part que sql_quote s'amuse à supprimer des zéros. Ils conseillent par ailleurs d'utiliser intval() pour les champs qui correspondent à des identifiants numériques. Essaie de voir si intval() a été utilisé au moment de la récupération/traitement des données. As-tu au moins localisé le fichier où ce traitement est effectué ? As-tu essayé de remplir le champ avec des données texte (au lieu d'un numéro) ? Si oui, ces données ont-elles correctement été enregistrées dans la base ? Je n'ai pas encore trouvé le fichier où sont traités les données, j'ai cherché pourtant Oui j'ai testé avec du texte et tout ce passe bien pour le texte mais dés que je mets un nombre le 0 s'en va par contre lorsque je met des points ou des espaces dans le numéro le 0 est bien pris en compte cette fois. Il me semble avoir vu INTVAL() quelques part dans les fichiers, je vais rechercher ça. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant