Aller au contenu

Exemples formulaires

Pour chaque type d'entrée, nous allons découvrir comment récupérer les données, les traiter et conserver les états.

Astuce

Avant PHP 7, on retrouvait régulièrement cette syntaxe :

isset — Détermine si une variable est déclarée et est différente de null

<?php 
$voyageType = isset($_POST["voyageType"]) ? $_POST["voyageType"] : '';

Désormais, nous pouvons utiliser l'opérateur de coalescence.

<?php 
$voyageType = $_POST["voyageType"] ?? '';  
L'opérateur de coalescence nulle (??) fonctionne ainsi :

  • Si $_POST["voyageType"] existe ET n'est pas null , alors$voyageType prend sa valeur
  • Sinon, $voyageType prend la valeur '' (chaîne vide).

Input

Input de type text, email, number... En fonction du type, il faudra également ajouter d'autres validations.

code

Voir l'exemple sur github >>

Bouton radio

⚠ Warning: : Il est impératif de vérifier que les choix sont bien ceux attendus. En effet, le serveur pourrait recevoir des données via une autre source que le formulaire attendu.

code

Voir l'exemple sur github >>

Liste déroulante

⚠ Warning: : Il est impératif de vérifier que les choix sont bien ceux attendus. En effet, le serveur pourrait recevoir des données via une autre source que le formulaire attendu.

code

Voir l'exemple sur github >>

Cases à cocher

⚠ Warning: : Il est impératif de vérifier que les choix sont bien ceux attendus. En effet, le serveur pourrait recevoir des données via une autre source que le formulaire attendu.

Code

Voir l'exemple sur github >>

Explication portion code

<?php 
$filteredOptions = array_intersect($_POST['options'], $validOptions);
Référence officielle >>

Comparaison directe de tableaux

  • array_intersect($array1, $array2) retourne un tableau contenant uniquement les valeurs communes entre $array1 et $array2
  • Ici, seules les options valides ($validOptions = ['vol', 'hotel', 'visite']) seront conservées
  • Les valeurs invalides sont automatiquement supprimées

Exemple :

<?php 
    $_POST['options'] = ['vol', 'hotel', 'invalid', 'test'];
    $validOptions = ['vol', 'hotel', 'visite'];

array_intersect() compare chaque élément de $_POST['options'] avec $validOptions et garde seulement les valeurs communes

<?php 
$filteredOptions = ['vol', 'hotel'];

Formulaire complet

A vous de jouer, en tenant compte des modèles, créez un formulaire complet. Attention, prévoyez un tableau pour contenir tous les messages d'erreurs.

Une fois votre formulaire fonctionnel,

- ajoutez un champ Prénom qui est obligatoire à l'encodage
- ajouter un champ Age qui est obligatoire à l 'encodage et qui ne peut contenir des nombres inférieur à 18
soluce

Cette solution proposée repose sur une série de conditions indépendantes pour chaque champ du formulaire. Chaque champ possède son propre bloc de validation, ce qui peut rendre le code très verbeux et difficile à maintenir lorsque le nombre de champs augmente.

A votre avis, comment pourriez-vous optimiser cette solution ?

Voir l'exemple sur github >>

Techniques filtres

L'exemple présenté repose sur des validations centralisées dans un tableau. Cette gestion des règles centralisée facilite l’ajout, la modification ou la suppression de règles sans duplication de code. Cette technique est intéressante lorsque le formulaire est complexe.

⚠ TODO: : séparer le code dans différents fichiers : 1 fichier pour les fonctions, 1 fichier pour le traitement de ce formulaire et 1 fichier pour la vue html. Lorsque vous aurez vu les class, il est également possible d'utiliser une logique comparable et des objets.

Code

Voir l'exemple sur github >>