Aller au contenu

Sujets conseillés

Posté

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.

Posté

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

Posté

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.

Posté
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.

Posté

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

Posté

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 ?

Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...