Skip to content
Extraits de code Groupes Projets
Valider 7a548bb4 rédigé par rastapopoulos@spip.org's avatar rastapopoulos@spip.org
Parcourir les fichiers

Une API générique de vérifiaction de valeur :

verifier($valeur, $type, $options)

Le principe est le même pour que l'API autoriser(). On appelle une fonction générique en lui indiquant un "type". Elle va ensuite chercher une fonction spécifique effectuant réellement le test demandé.

La fonction doit être compatible avec les mécanismes utilisés dans SPIP, notamment CVT. Pour cela, on ne retourne pas un booléen mais plutôt une chaine vide si tout s'est bien passé ou une chaine *expliquant l'erreur* lorsque ça ne va pas.

En plus de l'appel d'une fonction dédiée, avant de terminer on passe aussi dans un pipeline du même nom histoire de pouvoir personnaliser encore plus facilement, si besoin.

Exemple d'utilisation :
verifier($adresse, 'email')
verifier($nombre, 'entier', array('min'=>0, 'max'=>100))
verifier($chaine, 'regex', array('modele'=>'/^[\w]+$/'))

Reste à ajouter de multiples tests génériques qu'on utilise souvent (les trois précédents sont déjà implémentés).
parent
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
* text=auto !eol
inc/verifier.php -text
lang/verifier_fr.php -text
/plugin.xml -text
test/verifier.html -text
verifier/email.php -text
verifier/entier.php -text
verifier/regex.php -text
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/*
* Fonction de base de l'API de vérification.
* @param mixed $valeur La valeur a verifier.
* @param string $type Le type de verification a appliquer.
* @param array $options Un eventuel tableau d'options suivant le type.
* @return string Retourne une chaine vide c'est valide, sinon une chaine expliquant l'erreur.
*/
function verifier($valeur, $type, $options=array()){
// Si la valeur est vide, il n'y a rien a verifier donc c'est bon
if (!$valeur) return true;
// On cherche si une fonction correspondant au type existe
if ($verifier = charger_fonction($type, 'verifier/')){
$erreur = $verifier($valeur, $options);
}
// On passe le tout dans le pipeline du meme nom
$erreur = pipeline(
'verifier',
array(
'args' => array(
'valeur' => $valeur,
'type' => $type,
'options' => $options
),
'data' => $erreur
)
);
return $erreur;
}
?>
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
'erreur_email' => 'L\'adresse de courriel n\'a pas un format valide.',
'erreur_entier' => 'La valeur doit &ecirc;tre un entier.',
'erreur_entier_entre' => 'La valeur doit &ecirc;tre comprise entre @min@ et @max@.',
'erreur_entier_max' => 'La valeur doit &ecirc;tre inf&eacute;rieure &agrave; @max@.',
'erreur_entier_min' => 'La valeur doit &ecirc;tre supp&eacute;rieure &agrave; @min@.',
'erreur_regex' => 'Le format de la cha&icirc;ne n\'est pas valide.'
);
?>
<plugin>
<nom>API de vérification</nom>
<auteur>RastaPopoulos</auteur>
<licence>GPL v3</licence>
<version>0.1</version>
<etat>dev</etat>
<description>Fournit une fonction unique <code>verifier($valeur, $type, $options)</code> permettant de tester la validit&eacute; d'une valeur.</description>
<prefix>verifier</prefix>
<necessite id="SPIP" version="[2.0.10;]" />
</plugin>
<html>
<body>
<h1>Test de vérification de valeurs</h1>
<h2>Vérifions qu'un mot est un mot :</h2>
<pre>
<?php
include_spip('inc/verifier');
$un_mot = "poli4_EFSdq89";
$un_autre_mot = "aqe edioj o^";
$modele = "/^[\w]+$/";
echo "Modèle => $modele\n\n";
echo "'$un_mot' ?";
var_dump(verifier($un_mot, 'regex', array('modele'=>$modele)));
echo "'$un_autre_mot' ?";
var_dump(verifier($un_autre_mot, 'regex', array('modele'=>$modele)));
?>
</pre>
<h2>Vérifions des entiers :</h2>
</pre>
<?php
$un_entier = 568;
$un_autre_entier = "-89";
echo "$un_entier entre 0 et 1000 ?";
var_dump(verifier($un_entier, 'entier', array('min'=>0, 'max'=>1000)));
echo "$un_entier < 100 ?";
var_dump(verifier($un_entier, 'entier', array('max'=>100)));
echo "$un_autre_entier est positif ?";
var_dump(verifier($un_autre_entier, 'entier', array('min'=>0)));
echo "$un_autre_entier entre -100 et -50 ?";
var_dump(verifier($un_autre_entier, 'entier', array('min'=>-100, 'max'=>-50)));
?>
</pre>
<h2>Vérifions des emails :</h2>
</pre>
<?php
$email = "test@test.fr";
$email2 = "test";
echo "$email ?";
var_dump(verifier($email, 'email'));
echo "$email2 ?";
var_dump(verifier($email2, 'email'));
?>
</pre>
</body>
</html>
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/*
* Verifie la validite d'une adresse de courriel.
*/
function verifier_email_dist($valeur, $options=array()){
include_spip('inc/filtres');
if (email_valide($valeur))
return '';
else
return _T('verifier:erreur_email');
}
?>
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/*
* Verifie qu'un entier coherent peut etre extrait de la valeur
* Options :
* - min : valeur minimale acceptee
* - max : valeur maximale acceptee
*/
function verifier_entier_dist($valeur, $options=array()){
$erreur = _T('verifier:erreur_entier');
// Pas de tableau ni d'objet
if (is_numeric($valeur)){
// Si c'est une chaine on convertit en entier et si c'est un flottant on ne garde que l'entier
$valeur = intval($valeur);
$ok = true;
$erreur = '';
if (isset($options['min']))
$ok = ($ok and ($valeur >= $options['min']));
if (isset($options['max'])){
$ok = ($ok and ($valeur <= $options['max']));
}
if (!$ok){
if (isset($options['min']) and isset($options['max']))
$erreur = _T('verifier:erreur_entier_entre', $options);
elseif (isset($options['max']))
$erreur = _T('verifier:erreur_entier_max', $options);
else
$erreur = _T('verifier:erreur_entier_min', $options);
}
}
return $erreur;
}
?>
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/*
* Verifie une valeur suivant une expression reguliere.
* Options :
* - modele : chaine representant l'expression
*/
function verifier_regex_dist($valeur, $options=array()){
if (preg_match($options['modele'], $valeur))
return '';
else
return _T('verifier:erreur_regex');
}
?>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter