La validation des données fait partie intégrante du travail avec les formulaires. Des données soumises non valides peuvent non seulement entraîner des problèmes de sécurité, mais elles peuvent également endommager votre page Web. Aujourd'hui, nous allons voir comment supprimer les caractères illégaux et valider les données à l'aide de la fonction "filter_var".
Un exemple peut être vu ci-dessous. Un utilisateur a saisi le texte "Je n'en ai pas" comme page d'accueil. Si ces données devaient être entrées dans une base de données, puis récupérées ultérieurement sous forme de lien, le lien serait rompu..
La plupart des gens ont tendance à penser que la validation des données est un processus extrêmement fastidieux dans lequel on peut:
Il y a des problèmes évidents avec ce qui est mentionné ci-dessus:
Heureusement, à partir de la version 5.2, PHP a inclus une excellente fonction appelée filter_var
cela enlève la douleur de la validation des données.
filter_var
fera, à la fois, désinfecter et valider les données. Quelle est la différence entre les deux?
Remarque: pourquoi désinfecter et pas seulement valider? Il est possible que l'utilisateur ait accidentellement saisi un mauvais caractère ou qu'il s'agisse d'un mauvais copier-coller. En assainissant les données, vous prenez la responsabilité de rechercher l'erreur de l'utilisateur.
filter_var
En utilisant filter_var
est incroyablement facile. Il s’agit simplement d’une fonction PHP qui prend deux données:
Par exemple, le code ci-dessous supprimera toutes les balises HTML d'une chaîne:
$ string = "Bonjour le monde!
"; $ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string est maintenant" Hello, World! "
Voici un autre exemple - cette fois plus difficile. Le code ci-dessous garantira que la valeur de la variable est une adresse IP valide:
$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip est TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip est FALSE
C'est aussi simple à utiliser filter_var
. Pour une liste complète de toutes les règles que vous pouvez vérifier, voir la fin de ce tutoriel..
Vous trouverez ci-dessous un exemple rapide de nettoyage des entrées de deux champs: un champ de courrier électronique et un champ de page d'accueil. Cet exemple supprimera tous les caractères qui ne devraient apparaître dans aucun type de données..
"; if (isset ($ _ POST ['page d'accueil'])) echo filter_var ($ _ POST ['page d'accueil'], FILTER_SANITIZE_URL); echo"
";?>
En utilisant le FILTER_SANITIZE_EMAIL
et FILTER_SANITIZE_URL
constantes définies par PHP, le travail de deviner de savoir quels caractères sont illégaux est parti.
Le fait que les données soient désinfectées ne garantit pas le formatage correct. Dans l'exemple ci-dessous, les données n'ont pas besoin d'être nettoyées, mais il est évident que la saisie de l'utilisateur n'est pas un courrier électronique ni une URL..
Afin de s'assurer que les données sont correctement formatées, elles doivent être validées.
"; else echo" $ email is NE PAS une adresse email valide.
"; if (isset ($ _ POST ['homepage'])) $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (filter_var ($ homepage, FILTER_VALIDATE_URL)) echo" $ homepage is une URL valide.
"; else echo" $ homepage is NE PAS une URL valide.
";?>
Maintenant que les données ont été validées, vous pouvez être sûr que les informations fournies correspondent exactement à ce que vous recherchez..
Maintenant que l’assainissement et la validation des données sont couvertes, nous allons utiliser ces compétences avec un formulaire de soumission rapide par e-mail. Il ne s'agira en aucun cas d'une qualité de production - par exemple, aucun formulaire ne devrait nécessiter une page d'accueil - mais cela fonctionnera parfaitement pour ce tutoriel. Le formulaire prendra 4 informations:
Nous allons désinfecter et valider contre les 4 éléments de données et n'enverrons le courrier électronique que s'ils sont tous valides. Si quelque chose est invalide ou si des champs sont vides, le formulaire sera présenté à l'utilisateur avec une liste d'éléments à corriger. Nous renverrons également les données désinfectées à l'utilisateur s'il ne sait pas que certains caractères sont illégaux..
Pour la première étape, créez simplement un élément de formulaire avec 5 champs: le pour énuméré ci-dessus et un bouton d'envoi:
Vous pouvez vérifier si un formulaire a été soumis en vérifiant si le bouton d'envoi était "défini". Placez le code suivant au-dessus de votre formulaire:
if (isset ($ _ POST ['Submit'])))
Étant donné que les champs de nom et de message seront nettoyés et validés de la même façon, nous les ferons ensemble. Commencez par vérifier si l'un des champs est vide en procédant comme suit:
if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")
Ensuite, désinfectez-les avec le FILTER_SANITIZE_STRING
constant
$ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);
Enfin, vérifiez que les deux champs ne sont toujours pas vides. Cela permet de s'assurer qu'après la suppression de tous les caractères illégaux, il ne vous reste pas un champ vide:
if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")
Nous ne ferons aucune validation sur ces deux champs simplement parce qu'il n'y a pas de moyen absolu de valider contre un nom ou un message arbitraire.
Le code final ressemble à ceci:
if ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); if ($ _POST ['name'] == "") $ errors. = 'Veuillez entrer un nom valide..
'; else $ errors. = 'Veuillez entrer votre nom.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Veuillez entrer un message à envoyer..
'; else $ errors. = 'Veuillez entrer un message à envoyer.
';
Le champ de courrier électronique sera nettoyé et validé exactement comme il était auparavant dans le didacticiel..
Tout d’abord, vérifiez que ce n’est pas vide:
if ($ _POST ['email']! = "")
Ensuite, désinfectez-le:
$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);
Enfin, validez-le comme une véritable adresse email:
if (! filter_var ($ email, FILTER_VALIDATE_EMAIL))
Le code final ressemble à ceci:
if ($ _POST ['email']! = "") $ email = filtre_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email est NE PAS une adresse email valide.
"; else $ errors. = 'Veuillez entrer votre adresse email..
';
Encore une fois, le champ de la page d'accueil sera nettoyé et validé de la même manière que précédemment dans le tutoriel..
Tout d'abord, assurez-vous qu'il n'est pas vide:
if ($ _POST ['homepage']! = "")
Ensuite, désinfectez-le et supprimez tous les caractères illégaux:
$ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)
Enfin, validez-le pour vous assurer qu'il s'agit bien d'une URL:
if (! filter_var ($ homepage, FILTER_VALIDATE_URL))
Le code final ressemble à ceci:
if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage est NE PAS une URL valide.
"; else $ errors. = 'Veuillez entrer votre page d'accueil.
';
Maintenant que nous avons parcouru tous les champs, il est temps de signaler les erreurs ou d'envoyer le message. Commencez par supposer qu'il n'y a pas d'erreur:
si (! $ erreurs)
Ensuite, créez le message électronique:
$ mail_to = '[email protected]'; $ subject = 'Nouveau courrier à partir de la soumission du formulaire'; $ message = 'De:'. $ _POST ['name']. "\ n"; $ message. = 'Email:'. $ _POST ['email']. "\ n"; $ message. = 'Page d'accueil:'. $ _POST ['homepage']. "\ n"; $ message. = "Message: \ n". $ _POST ['message']. "\ n \ n";
Et enfin, envoyez le message:
mail ($ to, $ subject, $ message);
Cependant, s'il y a des erreurs, signalez-les et demandez à l'utilisateur de réessayer:
écho ''. $ erreurs. '';
Le projet terminé ressemble à ceci:
'; else $ errors. = 'Veuillez entrer votre nom.
'; if ($ _POST ['email']! = "") $ email = filtre_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email est NE PAS une adresse email valide.
"; else $ errors. = 'Veuillez entrer votre adresse email..
'; if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage est NE PAS une URL valide.
"; else $ errors. = 'Veuillez entrer votre page d'accueil.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Veuillez entrer un message à envoyer..
'; else $ errors. = 'Veuillez entrer un message à envoyer.
'; if (! $ errors) $ mail_to = '[email protected]'; $ subject = 'Nouveau courrier à partir de la soumission du formulaire'; $ message = 'De:'. $ _POST ['name']. "\ n"; $ message. = 'Email:'. $ _POST ['email']. "\ n"; $ message. = 'Page d'accueil:'. $ _POST ['homepage']. "\ n"; $ message. = "Message: \ n". $ _POST ['message']. "\ n \ n"; mail ($ to, $ subject, $ message); echo "Merci pour votre email!
"; else echo ''. $ erreurs. ''; ?>
J'espère que la lecture de ce tutoriel vous a fourni une bonne introduction aux nouvelles fonctionnalités de filtrage de données de PHP. Il y a encore beaucoup de fonctions et de règles qui n'étaient pas couvertes. Si vous souhaitez en savoir plus, veuillez consulter la section Filtrage des données du manuel PHP..