vue Gestion de formulaires en php
Kommunauty
Connexion
Inscription

Gestion de formulaires en php

le 7 octobre 2011 • Programmation • par NicoBelo

Bonjour à tous, ceci est mon premier tutoriel pour Kommunauty. Nous apprendrons dans celui-ci à gérer les formulaires internet qui sont très souvent la source de failles de sécurités pour un site. De plus, nous verrons toutes les vérifications possibles et les éventuelles failles qui pourraient nuire au bon fonctionnement.

Nous n'apprendrons non pas à créer un formulaire, mais plutôt à gérer les informations qui seront postées et à la fois réceptionnées avec du PHP.

Exemple d'un formulaire en langage HTML

Je vous met ci-dessous l'exemple d'un formulaire avec deux champs de texte (Courriel et Pseudo). Nous utiliserons ce formulaire durant toute la continuité de ce tutoriel pour les exemples et les démonstrations.

Contenu de notre page index.php

<form method="post" action="envoi.php">

    <input type="text" name="courriel" />
    <input type="text" name="pseudo" />

    <input type="submit" name="envoyer" />

</form>

Vous avez vu que notre formulaire ci-dessus était très basique. Il transmettra les informations entrées vers la page envoi.php en utilisant la méthode POST.

Vérifier que les champs ne sont pas vide

Nous allons premièrement vérifier que le formulaire n'a pas été soumis à perte. C'est à dire que nous vérifierons si les champs de notre formulaire ne sont pas vide. Nous verrons deux méthodes différentes.

Voici la première méthode que je vous propose d'essayer :<br />Contenu de notre page envoi.php

<?php
if($_POST["courriel"] == "" || $_POST["pseudo"] == "") {
    echo "Vous devez compléter tous les champs du formulaire";
}
?>

Et oui, ce petit bout de code permet de vérifier que les deux champs de notre formulaire ne sont pas vide. Seulement, cette méthode n'est pas la meilleure selon moi puisqu'il suffirait de mettre un simple espace dans l'un des champs pour dire qu'il est complété.


Découvrez aussi de nombreux serveur minecraft sur notre classement gratuit.

Nous utiliserons alors alors cette deuxième méthode plus simple et fonctionnelle :<br />Contenu de notre page envoi.php

<?php
if(empty($_POST["courriel"]) || empty($_POST["pseudo"])) {
    echo "Vous devez compléter tous les champs du formulaire !";
}
?>

Vous savez maintenant comment vérifier si un champ est complété ou nom.

Mais d'où sont postées les données ?

Et oui, je voulais aborder cette partie dans mon tutoriel puisque beaucoup de sites ne pensent pas à faire cette vérification qui est quand même assez importante selon moi.

Nous allons vérifier que les informations transmises proviennent bien d'un formulaire de notre site et non pas d'un source externe. Je m'explique :

Nous pourrions très bien créer un formulaire de cette façon :

<form method="post" action="http://www.site.com/envoi.php" target="_blank">

    <input type="text" name="courriel" />
    <input type="text" name="pseudo" />

    <input type="submit" value="post" />

</form>

Je vous laisse faire la comparaison de ce formulaire par rapport au premier qui est situé au début du tutoriel. J'ai en effet rajouté un target="_blank" et en page de destination, j'ai mis le lien relatif d'un site distant.

En gros, l'on peut refaire le formulaire à notre sauce et transférer les données vers un autre site ayant les mêmes valeurs que notre formulaire. Vous me direz oui, mais quel est le problème ?


Découvrez aussi mon ip qui est un service gratuit pour connaître votre adresse IP (V4 et V6) ainsi que sa localisation sur la carte du monde.


Alors, imaginons que nous ayons ceci dans notre formulaire, une case à cocher ayant comme valeur (si elle est cochée) : oui.

<input type="checkbox" name="choix" value="oui" />

Nous pourrions très bien (au lieu d'une case à cocher) mettre un champ de texte portant le même nom, mais en changeant la valeur :

<input type="text" name="choix" value="blabla" />

Vous voyez l'astuce ? Maintenant, nous allons voir comment la dévier. Il existe une solution toute simple : Il nous suffit de faire une vérification pour s'assurer que la page internet précédente visitée par l'internaute était bien celle ou se trouvait notre formulaire.

<?php
if($_SERVER["HTTP_REFERER"] !== 'http://www.site.com/index.php") {
    echo "Le formulaire est soumis depuis une source externe !";
}
?>

Mais vous l'aurez compris, il suffit simplement de remplacer www.site.com/index.php par l'adresse internet sur laquelle se trouve votre formulaire. Rien de bien compliqué jusqu'à maintenant !

Vérifier une adresse de courriel

Nous savons maintenant vérifier qu'un champ n'est pas vide et nous savons également comment contrer la soumission d'une source externe. Notre code ci-dessous vérifiera que les données reçues par le formulaire contiennent bien un "@" et un "." d'une adresse de courriel électronique.

Allez, fini le Blabla ! On veut du code, du codeeeee !

<?php
if(!filter_var($_POST["courriel"], FILTER_VALIDATE_EMAIL)) {
    echo "Votre adresse de courriel est incorrecte !";
}
?>

Vous voyez, ce n'est pas si difficile que ça en fin de compte, ça ne prend qu'une simple ligne de code et c'est totalement fonctionnel.

Chaîne à caractères spéciaux

Et maintenant (Pendant qu'on y est) nous allons voir comment vérifier que les données reçues ne contiennent pas de caractères spéciaux ! Là, j'aurais un peu de mal à vous expliquer le code à vrai dire. Non, ce n'est pas chinois, croyez moi !

<?php
if(!preg_match('/^[a-zA-Z0-9-_]+$/', $_POST["pseudo"])) {
    echo "Votre pseudo contient des caractères spéciaux !";
}
?>

Démonstration d'un formulaire (Côté PHP)

<?php
// On vérifie que le formulaire n'a pas été soumis via une source externe
if($_SERVER["HTTP_REFERER"] !== "http://www.site.com/index.php") {
    echo "Le formulaire est soumis depuis une source externe !";
}

// On vérifie que tous les champs ont été complétés
else if(empty($_POST["courriel"]) || empty($_POST["pseudo"])) {
    echo "Vous devez compléter tous les champs du formulaire !";
}

// On vérifie que l'adresse de courriel soit valide
else if(!filter_var($_POST["courriel"], FILTER_VALIDATE_EMAIL)) {
    echo "Votre adresse de courriel est incorrecte !";
}

// On vérifie que le Pseudo ne contient pas de caractères spéciaux
else if(!preg_match('/^[a-zA-Z0-9-_]+$/', $_POST["pseudo"])) {
    echo "Votre pseudo contient des caractères spéciaux !";
}

// Sinon, on indique que tout est parfait
else {
    echo "Félicitations, tout est bon !";
}
?>

Zippyshare



  
Aucun commentaire

Sois le premier à débuter une discussion à propos de cet article !



Ajoute un commentaire !

Ajouter une image... Trouvée sur internet » De mon PC »
Adresse URL :
Adresse de la page de la vidéo :
Taille du texte :
Couleur du texte :

Article lu 33211 fois.