Page 1 sur 1

Erreur sur Filtre PHP (filter_input_array())

Posté : 24 mai 2011, 14:27
par Grander
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);

?>

Re: Erreur sur Filtre PHP (filter_input_array())

Posté : 24 mai 2011, 18:00
par xTG
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.

Re: Erreur sur Filtre PHP (filter_input_array())

Posté : 24 mai 2011, 18:29
par grander
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.

Re: Erreur sur Filtre PHP (filter_input_array())

Posté : 24 mai 2011, 18:41
par Ryle
Dans ton tableau $option, la fonction de callback c'est pas '_validerNumero' plutôt que 'validerNumero' ? :)

Re: Erreur sur Filtre PHP (filter_input_array())

Posté : 25 mai 2011, 08:02
par xTG
Touché... Me demande bien par contre pourquoi PHP indique le premier argument alors que c'est le second... :|

Re: Erreur sur Filtre PHP (filter_input_array())

Posté : 25 mai 2011, 11:05
par grander
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éé.

Re: Erreur sur Filtre PHP (filter_input_array())

Posté : 25 mai 2011, 13:08
par Ryle
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...

Re: Erreur sur Filtre PHP (filter_input_array())

Posté : 25 mai 2011, 14:07
par grander
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.