PHP Classes

Input validation: Validate request values of different types

Recommend this page to a friend!
  Info   View files View files (15)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2024-01-09 (2 months ago) RSS 2.0 feedNot enough user ratingsTotal: 328 This week: 1All time: 7,157 This week: 560Up
Version License PHP version Categories
input-validation 1.0.9GNU General Publi...5.4HTTP, PHP 5, Validation
Description 

Author

This package can validate request values of different types.

It can validate individual values of HTTP GET and POST requests using basic or advanced types of validation methods.

The supported types of validation methods are implemented by individual classes for each method.

Currently it provides validation classes for arrays, booleans, character strings, dates, integer and floating point numbers and e-mail addresses.

Picture of SaphirAngel
Name: SaphirAngel <contact>
Classes: 1 package by
Country: France France
Age: ???
All time rank: 374895 in France France
Week rank: 416 Up17 in France France Up

Details

Mise à jour : 11/11/2012 Création du système de profil via la classe Profil. 18/09/2012 General : - Création du fichier config.inc.php qui contient les différentes configurations paramétrables - Le flag DEFAULT_FLAG vaut maintenant NOT_NULL | NOT_EMPTY au lieu de 0 (prise en charge différente). => modifiable via config.inc.php Sécurisations : - Implémentation de la sécurité SQL => protection mysql_real_escape_string si chaine non numérique => parcours des tableaux et protection des valeurs non numériques rencontrées - Valeur par défaut de la sécurité modifié : Passe de HTML_SECURE | SQL_SECURE à SQL_SECURE. Ceci parce que la protection html est principalement utile lors de la sortie utilisateurs au risque d'augmenter l'espace nécessaire dans la bdd. Check : - Ajout de la possibilité de rentrer la valeur par défaut dans le premier paramètre sur la méthode "check" => Autorise la syntaxe : $userName = $post('userName')->check('anonyme'); Exceptions : - Ajout de l'exception BasicCheckException qui intervient lorsqu'un filtre de type basic échoue sur une valeur (méthode validate) - Ajout de la constante EXCEPTION_IF_BASIC_CHECK_ERROR qui prend un boolean en valeur. Le check basique renverra une exception si EXCEPTION_IF_BASIC_CHECK_ERROR est à true. => Permet de lever une exception de cette façon : => $post('ND'); //Si $_POST['ND'] est vide ou non existant => $post('ND', CHECK, 'pi'); //Si $_POST['ND'] n'est pas un numérique ou inférieur à 0; TerraEnv Ici sont présent les différentes classes que j'ai créé pour mon utilisation personnelle mais qui, si je les trouve viable, peuvent servir à une ou plusieurs personnes. Explications de l'ajout des profils : Ceci est une nouvelle fonctionnalité qui permet une autre forme d'utilisation des filtres. Pour faire simple : - vous créez un ou plusieurs profils dans un fichiers spécifique - vous chargez ce fichier dans votre applications - les validations se feront des l'appel des valeurs dans le code Voici un exemple: J'ai créé dans le fichier nommé primary_types.php des filtres simples. $primaryTypes->check(['i', 'int'], NOT_EMPTY | NUMERIC, 'i'); Ceci créer un filtre sur les clé i et int, il va vérifier si la valeur est bien numeric et est un int. $primaryTypes->check(['login', 'username'], NOT_EMPTY, 's') ->advance(['login', 'username'], ['regex' => ['^[A-Za-z0-9_-]*$']]); Celui ci s'applique sur les clés login et username et permet de filtrer les données qui ne sont pas des chaines ou qui contiennent plus de caractère autorisées que prévu dans le code. $formTypes->check('submit', NOT_NULL | NOT_EMPTY) ->advance('submit', [], false); Ce dernier va juste vérifier que lé clé submit existe avec une valeur non null et me renvoyer false sinon. Une fois ce fichier créé je peux l'include dans code et le charger. include 'Request.php'; include 'Profil.php'; include 'profils/primary_types.php'; $post = new request('POST', 'default'); $post->load('primary_types'); Enfin je peux l'utiliser simplement comme cela : $message = ''; try { if ($post['userUpdate_submit']) { $login = $post['user_login']; $message = "Données valide"; } } catch (Exception $exception) { $message = 'Les données ne sont pas corrects'; } Sur le formulaire : <div> <?php echo $message; ?> </div> <form action="test_v2.php" method="POST"> <label for='user_login'>Identifiant : </label> <input id="user_login" name="user_login" type="text" value="" /> <br /> <input id="userUpdate_submit" type="submit" name="userUpdate_submit" value="envoyer" /> </form> Comme vous pouvez le voir les clés que l'on a précisé dans le profil sont utilisables de deux façons. Soit directement en tant que clé, soit en tant que fragment de clé. Dans ce dernier cas la clé doit être composée de cette manière : text_cleProfil (user_login ou userUpdate_submit dans notre cas). REQUEST : J'ai souvent été amené à devoir valider et vérifier un grand nombre de données venant de l'extérieur comme tout développeur web. Il s'avère que les méthodes que j'utilisais été répétitives et prenaient beaucoups trop de place pour de simple vérification à mon goût. La classe REQUEST permet donc de gérer de façon simplifiée et condensée les entrée GET et POST d'un script php. Il permet la validation en masse des données, ces dernières étant identifiées par leur clé comme cela ce fait normalement avec un $_POST ou un $_GET. Cette validation se fait de plusieurs manières qui ont l'intérêt d'être simple à mettre en place et prennent moins de place. Syntax : $post = new REQUEST($method, $defaultFlag); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $userData = $post($keys, FLAGS, $filters); > $keys peut être un tableau de clé ou un simple chaine de caractère représentant une clé. > FLAGS sont les différents flags de disponible que l'on peut additionner via l'opérateur | (classique) > $filters peut être un tableau d'identifiant de filtre ou une chaine représentant un identifiant de filtre /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Quelques syntaxes possibles : $userData = $post([$key_1, $key_2], FLAGS | CHECK, $filter); //$filter sera effectif pour toutes les clés $userData = $post([$key_1, $key_2], FLAGS | CHECK, [$filter_1]); //$filter_1 ne vérifiera que $key_1, le restera passera sans filtre $userData = $post([$key_1, $key_2], FLAGS | CHECK, [$filter_1, $filter_2]); //$filter_1 vérifiera $key_1 et $filter_2 vérifiera $key_2 $userData = $post($key, FLAGS, $filter); $userData = $post($key); //$key sera validé par rapport aux flag par défaut (NOT_NULL | NOT_EMPTY) Les flags de validation disponible sont : NOT_EMPTY Ne valide pas les valeurs vide NOT_NULL Ne valide pas les valeurs null | inexistante NUMERIC Ne valide pas les valeurs qui ne sont pas des nombres CHECK Fait appel aux filtres Les flags de sécurité disponibles sont HTML_SECURE Transforme la chaine en modifiant les tags html Les filtres disponibles (utilisable si le FLAG CHECK est présent) sont : i integer Vérifie si la valeur est un entier ip positive integer Vérifie si la valeur est un entier positif in negative integer Vérifie si la valeur est un entier négatif f float Vérifie si la valeur est un nombre à virgule fp positive float Vérifie si la valeur est un nombre à virgule positif fn negative float Vérifie si la valeur est un nombre à virgule négatif s string Vérifie si la valeur est une chaine (supérieur à 1 caractère) c character Vérifie si la valeur est un caractère (1 caractère) b boolean Vérifie si la valeur est un boolean m mail Vérifie si la valeur est un mail valide d date Vérifie si la valeur est une date valide Exemple : $post = new REQUEST('POST'); $userDataNumeric = $post(['ND', 'age'], NUMERIC)->isValid(); //On verifie si $_POST['ND'] et $_POST['age'] sont des valeurs numérique; $userDataTest = $post(['ND', 'age'], CHECK, 'pi')->isValid(); //On verifie si $_POST['ND'] et $_POST['age'] sont des entiers positifs $dataNews = $post(['ND', 'titre', 'contenu'], NOT_EMPTY | CHECK, ['pi', 's', 's'])->isValid(); //On verifie que les $_POST['ND'], $_POST['titre'] et $_POST['contenu'] ne sont pas vide (ou null). // En même temps on sécurise les valeurs contenant du html // Et enfin on valide les données à partir de filtre : ND doit etre un entier positif et le reste doit etre des chaine //VERIFICATION AVANCEE try { $post->shield_on(HTML_SECURE, ['titre', 'contenu']); //On active le bouclier seulement pour les valeur titre et contenu if ($post(['ND', 'age', 'titre', 'contenu', 'password'], DEFAULT_FLAG | CHECK, ['pi', 'pi', 's', 's', 's'])->isValid()) { $ND_AGE = $post(['ND', 'age'])->check(['i_range' => [0, 60]], [5, 10]); //On valide les données numérique, si non valide on remplace par les valeurs par défaut $titre = $post('titre')->validate(['size' => [3, 255]]); //On valide le titre avec la taille, si non valide une exception est lancée $contenu = $post['contenu']; //On récupère simplement la valeur contenu dans $_POST['contenu'] après l'avoir sécurisé echo var_dump($ND_AGE); echo ':'.$titre; echo '<br />contenu : '.$contenu; } else { var_dump($post->get_errors_list()); } } catch (Exception $e) { echo $e->getMessage(); }

  Files folder image Files  
File Role Description
Files folder imagefilters (8 files)
Files folder imageprofils (1 file)
Accessible without login Plain text file config.inc.php Conf. Configuration script
Accessible without login Plain text file post_test.php Test Unit test script
Plain text file Profil.php Class Class source
Accessible without login Plain text file README Doc. Auxiliary data
Plain text file Request.php Class Class source
Accessible without login Plain text file test_v2.php Example Unit test script

  Files folder image Files  /  filters  
File Role Description
  Plain text file ArrayFilter.php Class Class source
  Plain text file booleanFilter.php Class Class source
  Plain text file CharacterFilter.php Class Class source
  Plain text file DateFilter.php Class Class source
  Plain text file FloatFilter.php Class Class source
  Plain text file IntegerFilter.php Class Class source
  Plain text file MailFilter.php Class Class source
  Plain text file StringFilter.php Class Class source

  Files folder image Files  /  profils  
File Role Description
  Accessible without login Plain text file primary_types.php Example Auxiliary script

 Version Control Unique User Downloads Download Rankings  
 100%
Total:328
This week:1
All time:7,157
This week:560Up