Login   Register  
PHP Classes
elePHPant
Icontem

File: README

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of SaphirAngel  >  Input validation  >  README  >  Download  
File: README
Role: Documentation
Content type: text/plain
Description: Auxiliary data
Class: Input validation
Validate request values of different types
Author: By
Last change:
Date: 1 year ago
Size: 9,365 bytes
 

Contents

Class file image Download
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();
}