Validateur des entrées utilisateurs

Description

Je vous propose ici un système qui permet la vérification et le formatage des données utilisateurs (peut facilement être étendue aux sessions). Il a été développé afin de limiter le temps passé à vérifier et sécuriser les différentes valeurs exterieur à l'application et, ainsi, passé plus de temps dans le développement de l'application et des algorithmes à proprement parlé.

Modification:
Ajout d'un système de profil qui permet d'éviter de réécrire les tests et de faire des validations automatiquement à l'appel de la valeur.

Le code est amené à être modifié régulièrement.

Je me sers de ce code comme entrée obligatoire pour mon implémentation du modèle mvc.

Je vous invite à me donner votre avis sur ce code et peut être des amériation ou des idées si l'idée vous intéresse (oui je suis très positif). Evidemment, si le code ne vous plait pas vous pouvez aussi m'en donner la raison. Merci d'avance.

Ci dessous un jeu de test.

Source / Exemple :


/***** Fichier de déclaration des filtres
<?php

$primaryTypes = new Profil('primary_types');
$primaryTypes->check(['i', 'int'], NOT_EMPTY | NUMERIC, 'i');
$primaryTypes->check(['s', 'string'], NOT_NULL, 's');
$primaryTypes->check(['k', 'key'], NOT_EMPTY | NUMERIC, 'i')
            ->advance(['k', 'key'], ['i_range' => [0, 60]], 0);
$primaryTypes->check(['login', 'username'], NOT_EMPTY, 's')
            ->advance(['login', 'username'], ['regex' => ['^[A-Za-z0-9_-]*$']]);
$primaryTypes->check('phonenumber', 0)
            ->advance('phonenumber', ['regex' => ['^(?:\+[0-9]{1,3}|0)(?:[0-9]{9})$']]);

$formTypes = new Profil('form_types');
$formTypes->check('submit', 0)
          ->advance('submit', [], false);

/***** Fichier de code
<?php
include 'Request.php';
$post = new request('POST', 'default');

//Chargement des profils à utiliser
$post->load('primary_types');
$post->load('form_types');
    

$message = '';
try {
    if ($post['userUpdate_submit']) {
        $login = $post['user_login'];
        $userKey = $post['user_key'];
        $message = "Données valide";
    }
} catch (Exception $exception) {
    $message = 'Les données ne sont pas corrects';
}

?>

<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="user_key" name="user_key" type="hidden" value="20"/>
    <br/>
    <input id="userUpdate_submit" type="submit" name="userUpdate_submit" value="envoyer"/>
</form>

Conclusion :


Cette exemple ne concerne que la partie de la gestion des profils. Pour un exemple concernant la base même du module, et donc sans passer par les profils, je vous invite à télécharger les sources.

Une petite explication :
Les profils sont déclarés avant dans des fichiers php contenu dans le dossier "profils". Ils seront par la suite automatiquement ajouté à l'application et vous pourrez donc charger n'importe lequel des profils créés.

Une fois un profil chargé, dès que vous ferez appel à la classe request, via "$post" dans cette exemple, le script vérifie si la clé est valide selon les profils chargés et surtout si le contenu est aussi valide selon la déclaration du profil.

En cas de non validité, le script renverra, soit, une valeur par défaut, soit, une exception avec comme message l'explication du refus.

Tout cela ce fait automatique pour peu que le profil existe.

De plus un profil se créé sur une clé "login", "key", "submit". Mais comme vu dans l'exemple les clés peuvent être utilisé comme morceau de clé dans une requete http (post, get). L'écriture de cette clé est alors maclé_lacleprofil.
Ceci permet de créer des classes que plusieurs clés réel pourront utiliser.

Je vous invite à me donner votre avis sur ce code et peut être des amériation ou des idées si l'idée vous intéresse (oui je suis très positif). Evidemment, si le code ne vous plait pas vous pouvez aussi m'en donner la raison. Merci d'avance.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.