Erreur sur Filtre PHP (filter_input_array())

Grander
Invité n'ayant pas de compte PHPfrance

24 mai 2011, 14:27

Bien le bonjour,

Je fais des testes sur un formulaire basique. Mon objectif est vérifier les données saisies par un utilisateur dans un formulaire, par le biais de filtre PHP
J'utilise notamment la fonction "Filter_input_array()" qui grâce à un tableau établit la correspondance entre le nom des champs et leurs options. Malgré mes recherches, je n'arrive pas à saisir pour quelles raisons précises, j'ai cette erreur.

Voici l'erreur affiché sur ma page PHP :

Warning: filter_input_array() [function.filter-input-array]: First argument is expected to be a valid callback in C:\xampp\htdocs\test_portail\Projet\bibfonct.php on line 51


Voici mon codage :
class controle{

function _syntaxe($messageErreur, $options){
	
	$resultat = filter_input_array(INPUT_POST, $options);
	if($resultat != null) { //Si le formulaire a bien été posté.
		foreach($options as $cle => $valeur) { //Parcourir tous les champs voulus.
			if(empty($_POST[$cle])) { //Si le champ est vide.
				$messageErreur[$cle]= "WAR";
			}
			elseif($resultat[$cle] === false) {	//S'il n'est pas valide.
				$messageErreur[$cle]= "ERR";
			}
			else{// S'il est valide
				$messageErreur[$cle]= "OK";
			}
					echo $messageErreur[$cle];
		}
		return $messageErreur;
	}
	else {
		return "ERR";
	}
}

}

class filtre{

/** fonction de validation d'un numéro **/
function _validerNumero($telATester) {
    //Retourne le numéro s'il est valide, sinon false.
    return preg_match('`^0[1-9]([-. ]?[0-9]{2}){4}$`', $telATester) ? $telATester : false;
}

/** Fonction pour nettoyer un numero **/
function _nettoyerNumero($telANettoyer) {
    //Enlever tous les caractères non numériques.
    $telANettoyer = preg_replace('`[^0-9]`', '', $telANettoyer);
    
    //Ajout de zéros si besoin.
    $telANettoyer = str_pad($telANettoyer, 10, '0', STR_PAD_LEFT);
    
    return $telANettoyer;
}

function client(){
	$options = array(
    'prenom' => FILTER_SANITIZE_STRING, //Enlever les balises.
    'nom' => FILTER_SANITIZE_STRING, //Enlever les balises.
    'email' => FILTER_VALIDATE_EMAIL, //Valider l'adresse de messagerie.
    'age' => array(
        'filter' => FILTER_VALIDATE_INT, //Valider l'entier.
        'options' => array(
            'min_range' => 0 //Minimum 0.
        )
	),
	'numero' => array( // Valider un numéro de téléphone
        'filter' => FILTER_CALLBACK,
        'options' => 'validerNumero'		
    )
);
	return $options;
}

}
?> 
<form action="bibfonct.php" method="post">
    Prénom : <input type="text" name="prenom"/><br/>  
nom : <input type="text" name="nom"/><br/>
    Adresse de messagerie : <input type="text" name="email"/><br/>
    Âge : <input type="text" name="age"/><br/>
    Téléphone : <input type="text" name="numero"/><br/>
    <input type="submit" value="Envoyer"/>
</form>
<?php

$messageErreur = array();
$filtre = new filtre;
$options = $filtre-> client();
$controle = new controle;
$controle -> _syntaxe($messageErreur, $options);

?>

ViPHP
xTG
ViPHP | 7331 Messages

24 mai 2011, 18:00

Il semblerait que la constante PHP ne contienne pas ce qu'il faut.
Soit tu as une version de PHP < 5.2.0 (mais auquel cas tu devrais je pense avoir un fatal error sur la fonction...) soit tu redéfinis la constante toi même ce qui pose problème.

Petit nouveau ! | 6 Messages

24 mai 2011, 18:29

Ma version PHP est valide.

Tout fonctionne parfaitement sauf quand j' ajoute le champs "numéro". En effet, dans mon tableau "$options" c'est la seule fois, où j'utilise la fonction "validerNumero" que j'ai créé pour faire office de filtre. Les résultats sont impeccables malgré l'erreur qui s'affiche.

Les paramètres à utiliser dans mes fonctions me semblent cohérents notamment la fonction filter_input_array() . Au final, je n'arrive pas à déterminer quelle est mon erreur.
Un bon informaticien est un informaticien paresseux

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 mai 2011, 18:41

Dans ton tableau $option, la fonction de callback c'est pas '_validerNumero' plutôt que 'validerNumero' ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
xTG
ViPHP | 7331 Messages

25 mai 2011, 08:02

Touché... Me demande bien par contre pourquoi PHP indique le premier argument alors que c'est le second... :|

Petit nouveau ! | 6 Messages

25 mai 2011, 11:05

Malgré mes changements, il n'arrive pas à utilisé ma méthode "validerNumero" et ne reconnait pas mon filtre...

En gros, mon problème est que je n’arrive pas à utilisé les filtres que j'ai moi même créé.
Un bon informaticien est un informaticien paresseux

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mai 2011, 13:08

Euh... en regardant ton code de plus près, _validerNumero n'est pas une fonction, mais une méthode de ta classe filtre... du coup php ne risque pas de la trouver :)

Tu peux éventuellement essayer avec "filtre::_validerNumero", mais je ne sais pas si cela fonctionnera...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

25 mai 2011, 14:07

Ok, j'avais pas pensé à cela! merci ça marche! Il faut juste que je mets cette méthode en static pour respecter la convention filtre::_validerNumero.
Un bon informaticien est un informaticien paresseux