FONCTION DE FILTRAGE DES DONNÉES

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 28 juin 2005 à 09:57
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006 - 18 juil. 2005 à 10:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32378-fonction-de-filtrage-des-donnees

lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
18 juil. 2005 à 10:25
Effectivement, je n'avais pas envisagé cette possibilité. Mais comme tu l'as aussi fait remarquer, à mon avis il s'agit de chiffres romains, autrement dit de lettres quand meme. Au cas où tu voudrais avoir une fonction qui te renvoie un message d'erreur si le nom de famille est incorrecte plutot que de le corriger, je viens d'en mettre une au point, tout débutant que je suis en php :

//--------------------------------------------------------------
// verif_nom : fonction qui permet de vérifier que le nom a bien
//été saisi, qu'il est correctement formaté et qu'il ne dépasse
//pas une certaine longueur.
//---------------------------------------------------------------
function verif_nom($nom){
$tailleMax = 70; // taille du champs dans la BDD
$erreur = '';
// si le champs n'est pas vide
if($nom!='') {
// on enlève les espaces de part et d'autre de la saisie, on convertit les tags html (qui peuvent
// poser des problème au niveau de la sécurité, et on enlève les antislashes de la chaîne.
$champs = stripslashes(htmlentities(trim($nom)));
// expression régulière permettant de vérifier la validité du nom
$regex = "![\&"\#\{\(\[\|\\\@\)\]\+\=\}\£\$\¤\µ\*\%\?\<\>\,\?\;\.\:\/\!\§\_\²0-9\^\`]|[ ]{2,}|\- *\'|\' *\-|\' *\'|\- *\-|^\-|\'$|\-$!";
// si le nom contient un caractère invalide ou qu'il est vide
if(preg_match($regex,$champs)||$champs==''){
// on avertit l'utilisateur que le champs n'est pas valide
$erreur = 'Nom incorrect.';
}
// on vérifie si le nom est trop long
elseif(strlen($nom)>$tailleMax){
$erreur = 'Nom trop long de ' . (strlen($nom)-$tailleMax) . ' caractère(s).';
}
}
// si le champs est vide
else{
// on avertit l'utilisateur que le champs est vide
$erreur = 'Veuillez saisir votre nom svp.';
}
return $erreur;
}

Voilà, c'est un peu long et des améliorations sont surement possible mais en attendant chez moi çà marche, j'ai beau eu testé je n'ai pas encore réussi à feinter la fonction.
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
18 juil. 2005 à 06:59
MERCI LORDSKYSER1 pour la bonne note que tu as attribué à cette source... Merci beaucoup. N'hésitez pas à noter que je puisses juger le niveau de mes sources...

Quand au nom qui comportent des chiffres, voilà quelqueS exempleS :
_ Le roi Louis 14
_ Le roi Louis 16
_ Le pape Jean-Paul 2
Je crois aussi que cela se fait de numéroter les noms des enfants et petits-enfant s'ils portent le même nom que le grand-père... Effectivement cette info est à confirmer.
C'est vrai qu'en général les chiffres sont plutôt sous une forme romaine...

Merci aux autres pour les commentaires et les suggestions.

LNP...
pour vous...
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
17 juil. 2005 à 10:36
Non, si tu tapes Wougadougourastou il ne proposera rien vu que ce nom ne contient aucun caractère spécial interdit, il se contentera de le mettre en majuscule avant de l'enregistrer en base (que veux tu qu'il corrige? c'es quoi l'erreur dans ce nom?). Par contre si tu tapes Wougadougou(rastou parce que tu as dérapé sur la parenthèse, il te fera remarquer que çà doit plutôt être WOUGADOUGOURASTOU. Tu copie-colles et hop l'erreur est réglée en 2sec. Tu comprends GRenard?
A part çà je ne savais pas qu'il y a avit parfois des chiffres à la fin d'un nom! J'ai beau chercher, je ne me souviens pas avoir croisé de tels noms si ce n'est pour les login, tu as un exemple LNP stp? Au fait je t'ai mis 9/10 ;-)
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
17 juil. 2005 à 09:09
J'ai souvent entendu dire que les noms n'avaient pas d'orthographe... Mais la particularité d'un nom est qu'il ne contient pas tous les caractères. Il ne contient que des lettres accentuées ou pas et des apostrophes et des tirets... Quoi d'autre ? Je ne vois pas quoi d'autres... Des chiffres quelques fois à la fin, mais cela reste assez rares quand même !

LNP...
pour vous...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
16 juil. 2005 à 22:17
En même temps un nom ça a pas forcément une orthographe précise :-)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
16 juil. 2005 à 21:59
... et un nom de famille... si je marques mon nom de famille
"Wougadougourastou" tu crois qui va me proposer quelque chose ton script ? (c'est pas mon nom en passant...)
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
16 juil. 2005 à 21:22
ba quand tu fais une recherche sous google et que tu fais une faute de frappe, il te suggère bien la bonne orthographe (ex: vlile --> Essayez "ville"). Tu dois bien te marrer alors si tu lol à chaque fois que tu fais une faute dans ta recherche sous google et qu'il te fais une suggestion... hihi

Brice de nice ;-)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
16 juil. 2005 à 18:54
Une suggestion de nom... Aye faut être nul pour que quelqu'un se fasse suggérer un nom...
"Je crois que ton nom est incorrect, est-ce que cela serait plutôt XX..."
TSSS loll
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
16 juil. 2005 à 10:48
Pour ma part je vais utiliser cette fonction pour savoir si le nom entré est correct :

function verif_nom($txt) {
$txt =str_replace("'","",$txt);
$txt = str_replace(" ","",$txt);
$txt = str_replace("-","",$txt);
if (ctype_alpha($txt)) { return true;}
return false;
}

Puis s'il ne l'est pas, j'utiliserai ta fonction nom pour faire une suggestion de saisie à l'utilisateur. Je testerai les autre CASE cet aprem ou demain et je te mettrai une note à ce moment (surement bonne hihi)
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
15 juil. 2005 à 22:00
Oui... Mais mon cas n'est pas unique sur Terre... D'autres peuvent prendre cette fonction pour l'utiliser, l'améliorer ou l'adapter à leurs propres cas d'utilisation...

LNP...
pour vous...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
15 juil. 2005 à 21:55
oui donc ça convient pour ton cas personnel ;-)
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
15 juil. 2005 à 21:35
Petite explication :

Comme en PHP, il n'y a pas vraiment de typage pour les variables, alors j'utilise cette fonction. Fonction que j'ai piqué dans un de mes cours de programmation, que vous retrouverai avec ce lien "http://saphirtech.com/p5/web_dynamique.pdf". La fonction, je l'ai donc prise comme elle nous a été enseignée et finalement en l'étudiant un peu, je m'y suis adapté. Maintenant je l'utilise partout où j'ai des variables transmises via le tableau $_REQUEST. Depuis que je l'utilise j'ai ajouté les "types" dont j'avais moi-même besoin. C'est, d'ailleurs, la vocation première de cette fonction. Cette fonction sert aussi de test de sécurité. Elle vérifie ainsi que la variable a bien été transmise.

En fait, dans les exemples de cours, la fonction est surtout utilisée de la manière suivante :

if ( $_REQUEST['nom'] == fx_filter( 'nom' , 'NOM' ) ) {
echo $_REQUEST['nom'];
}

Comprenez-vous mieux ?


LNP...
pour vous...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
15 juil. 2005 à 19:57
Tiens c'est vrai que ça serait préférable.
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
15 juil. 2005 à 19:51
Tu m'Expliqueras aussi pourquoi tu vas chercher ca dans le request... c'est pas portable... pourquoi ne pas passer direct $_REQUEST['nom'] ...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
15 juil. 2005 à 19:13
lol après faut adapter la phrase ^^

bref pour les underscores tu peux utiliser la fonction strpos par exemple, si il ne s'agit que de ça...
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
15 juil. 2005 à 18:57
"Pourquoi faire compliqué quand on peut faire simple ?" --> Et pourquoi pas? <--> Pourquoi faire simple quand on peut faire compliqué? hihi
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
15 juil. 2005 à 18:53
en effet, c'est nettement mieux!!! cependant dans un nom il ne faut pas autoriser les underscore (_).
Par contre, je n'ai pas pu tester si les lettres accentuées qui n'existe pas en français (n tildé ou o accent grave par exemple) sont correctement traitées car je ne sais pas comment les faire.
De plus, à mon avis il serait peut être plus judicieux que la fonction renvoie true si le nom est correct, false sinon, afin que ce soit plus facile à exploiter dans le cadre d'une vérification de formulaire (si false --> redirection vers le formulaire). Sais-tu quelles fonctions je dois utiliser pour faire cela stp? Parce que la çà fait deux aprem que je cherche et... je sèche toujours. Alala les débuts en php c'est laborieux lol.
Je n'ai pas encore testé les autres 'case' car je bloquais la-dessus, mais je vais pas tarder vu que j'essaie de vérifier les infos d'un formulaire d'inscription en php. Si ca t'intéresse d'ailleurs j'ai une fonction javascript pas mal pour vérifier la validité d'un email, en tout cas plus complète et surement plus juste que celles que j'ai pu croiser, enfin je crois hihi.

En tout cas FELICITATIONS pour le travail que tu as déjà accompli!
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
15 juil. 2005 à 18:48
" Mouai, c'est la solution de facilité... lol je plaisante"

Bah non mais bon, pourquoi faire compliqué quand on peut faire simple ?
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
15 juil. 2005 à 14:22
Monsieur lordskyser1,

J'ai testé avec la dernière version de ma fonction est voilà le résultat :

$_REQUEST['test'] = "alex@\'(^^/:)";
echo fx_filter('test','NOM');
// affichage : ALEX

Et toi ? ? ? Toujours les mêmes bugs ? ? ?
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
15 juil. 2005 à 14:10
J'ai testé la fonction pour corriger le nom. Alors dans la zone de texte nom je met alex@\'(^^/:) et après passage de la fonction j'ai ALEX@\'(^^/: !!! Bref, les caractères non autorisés dans un nom sont loin d'être tous détectés et enlevés... En tout cas je suis étonné de ne pas trouver de fonction de vérification d'un nom qui soit exhaustive, c'est pourtant nécessaire à quiconque crée un site avec inscription de membres...bizarre
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
15 juil. 2005 à 11:28
Je poste un commentaire pour que les mises-à-jour soient visibles... C'est un peu lourd mais au moins cela fonctionne...
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
15 juil. 2005 à 10:09
Mouai, c'est la solution de facilité... lol je plaisante. Mais si on veut les conserver, il se pose un autre problème, c'est qu'il y a des accents qui n'existent pas dans la langue de Molière (ex: n accent grave), donc pour le range dur dur...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 juil. 2005 à 20:56
ok, bah tu supprimes les accents avant de parser le nom de famille, y'a des sources sur ce site montrant le principe (une ligne avec un str_replace)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
14 juil. 2005 à 20:52
les lettres il faut y inclures tous les lettres avec accent, c'est de ça dont je voulais parler...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 juil. 2005 à 20:16
Un nom de famille peut comporter :

-des lettres
-une ou plusieurs(sic) apostrophes (et encore)
-un ou plusieurs traits d'union.

Je vois pas ensuite ce qu'il faut rajouter...
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
14 juil. 2005 à 20:15
je sais pas plus que toi mais moi je ferais peut-être un range de caractères ou alors des caractères interdits (^)...
Je ne sais pas plus que toi sur le coup la... si je savais je le posterais moi même...
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
14 juil. 2005 à 16:48
"Un nom de famille peut être encore plus compliqué je ne le scannerait pas avec ça" GRENARD

Ok, mais peux-tu préciser comment tu "scannerais" un nom de famille ou un prénom stp? C'est ce que je cherche en ce moment et j'ai bien du mal à trouver. J'ai posté un message sur le forum à ce sujet, mais personne n'y a encore répondu, est-ce vraiment si complexe?
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
4 juil. 2005 à 13:15
J'ai posté un commentaire pour que les mises-à-jour soient visibles...
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
4 juil. 2005 à 13:13
Mise à jour...
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
29 juin 2005 à 01:49
... à mon avis il manque le ï et ç et majuscule des caractères spéciaux. Un nom de famille peut être encore plus compliqué je ne le scannerait pas avec ça... (même chose pour le prénom)
Le Tel, il faut donner un exemple pour ce que ca marche parce que je suis sur que ton tel ne ressemble pas du tout au mien.
STRING_S, explique mieux pour les débutants...
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
28 juin 2005 à 22:06
un "return true" - "return false" est peut-être plus approprié.
Et faire une autre fonction pour traiter la chaine pour un magic_quote_gpc() et autre trim().
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juin 2005 à 09:57
Salut,

"Mais je ne comprend pas pourquoi cela ne fonctionne pas correctement..."

direction le forum...
Rejoignez-nous