Fonction de filtrage des données

Soyez le premier à donner votre avis sur cette source.

Vue 7 507 fois - Téléchargée 230 fois


Description

fonction de filtrage des données : Tout est dit, je pense...

Source / Exemple :


// fonction de filtrage des données
function fx_filter($nom, $type, $defaut = "" ) {

	// si la variable n'a pas été reçue, renvoyer valeur par defaut
	if( ! isset( $_REQUEST[$nom] ) ) return $defaut;
	$unsafe = $_REQUEST[$nom];

	switch( $type ) {	

	case 'NUMERIC':
	// Teste si c'est un nombre. Renvoie defaut si ce n'est pas le cas
		if( ! is_numeric( $unsafe ) ) return $defaut;
		break;

	case 'TEXTE':
	// Enleve les caractères non autorisés dans un texte
		$unsafe = eregi_replace("[^a-zA-Z0-9_&~@/,\.'()?!éèàêâôîûùç-]\S","",$unsafe);
		break;

	case 'STRING':
	// Enleve les caractères non autorisés dans une chaine de caracteres
		$unsafe = eregi_replace("[^a-zA-Z0-9_&~@/,\.'()?! éèàêâôîûùç-]","",$unsafe);
		break;

	case 'STRING_S':
	// Enlève les caractères spéciaux de la chaîne de caractères
		$unsafe = eregi_replace("[^a-zA-Z0-9_ -]+$", "", $unsafe);
		break;

	case 'MAIL':
	// Teste le format d'une adresse mail. Renvoie $defaut si le format n'est normal
		$unsafe = strtolower( $unsafe );
		if ( ! preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!i", $unsafe) )
			return $defaut;
		break;

	case 'URL':
	// Teste le format d'une adresse Internet ou ftp. Renvoie $defaut si le format n'est normal
//		if ( ! preg_match("!(((https?|ftp)://(w{3}\.)?)(\!www)(\w+-?)*\.([a-z]{2,4}))!",$unsafe) )
		if ( ! preg_match("!^(https?|s?ftp):\/\/(w{3}\.?)?\S!",$unsafe) )
			return $defaut;
		break;

	case 'TEL':
	// Enleve les caractères espace, point et les parenthèses.
	// Puis teste si la chaine ne contient que des chiffres. Renvoie $defaut si ce n'est pas le cas.
		$unsafe = ereg_replace("[\ ().]","", $unsafe);
		if ( ! ( ereg("^[+0-9][0-9]+$",$unsafe) ) )
			return $defaut;
		break;

	case 'NOM':
	// Enlève les caractères non autorisés dans un nom
	// Et le reformate en MAJUSCULE
		$unsafe = strtoupper( $unsafe );
   		$unsafe = preg_replace("![^ÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç' a-zA-Z0-9_-]*!i", "", $unsafe);
 		while ( preg_match("!^[^a-zA-ZÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç]|[^a-zA-ZÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç0-9]$!i", $unsafe) ) {
			$unsafe = preg_replace("!^[^a-zA-ZÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç]|[^a-zA-ZÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç0-9]$!i", "", $unsafe);
		}
		while ( preg_match("!(__|--)!" , $unsafe) ) {
			$unsafe = preg_replace("!_+|-+!", "-", $unsafe);
		}
 		break;

	case 'PRENOM':
	// Enlève les caractères non autorisés dans un nom
	// Et le reformate pour que chaque mot commence par une MAJUSCULE
		$unsafe = fx_filter($nom, 'NOM');
		$unsafe = ucwords( strtolower( $unsafe ) );
		break;

	default :
	// Si le type n'est pas répertorier $defaut est renvoyé
		return $defaut;
	}
	
	//Echappement des données saisies.
	if ( get_magic_quotes_gpc() == 0 ) {
		$unsafe = stripslashes($unsafe); // Pour éviter trop d'avoir trop d'anti-slashe dans un texte filtré
		$unsafe = addslashes($unsafe);
	}

	return $unsafe;
}

Conclusion :


C'est un code que j'ai récupéré dans mon cours... Je met cette fonction ici pour pouvoir avoir vos réactions et pour pouvoir l'améliorer...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

lordskyser1
Messages postés
84
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
1 juillet 2006
-
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
97
Date d'inscription
samedi 12 mars 2005
Statut
Membre
Dernière intervention
24 octobre 2007
-
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
-
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
97
Date d'inscription
samedi 12 mars 2005
Statut
Membre
Dernière intervention
24 octobre 2007
-
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 -
En même temps un nom ça a pas forcément une orthographe précise :-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.