Passer au contenu

Gérez des formulaires complexes avec PHP et MySQL

Le couple PHP/MySQL facilite la génération de formulaires dont une partie des informations provient de la base de données. En sens inverse, PHP valide les données saisies par l’internaute avant de les insérer dans la base MySQL.

Vos internautes souhaitent recevoir de la documentation sur les produits présentés sur votre web. Apprenez à constituer un formulaire adéquat, à partir du langage PHP et d’une base MySQL. Utilisés conjointement, ces deux techniques servent en effet à créer des formulaires complexes dont les informations proviennent d’une base de données. Ils effectuent aussi des traitements (contrôle des informations, confirmation par e-mail, etc.) sur les données renseignées par l’utilisateur avant de les stocker dans la base.L’architecture reste assez traditionnelle. Un formulaire (“form.php“) récupère les informations saisies par l’internaute et la page suivante (“inscription.php“) déclenche la validation des données, les insère dans la base si elles sont valides, puis affiche un message personnalisé. Ce dernier signale à l’utilisateur les erreurs qu’il a commises en saisissant les informations ou lui confirme la prise en compte de sa demande. Les fonctions génériques sont stockées dans une librairie (“lib.form.php“) afin d’être utilisées dans tous les formulaires du site. Cette approche facilite en outre leur maintenance.

1. Constituez la base de données

Lancez PHPmyAdmin, créez une nouvelle base de données et nommez-la “commerce“. Elle contiendra 3 tables : clients, produits et clients_produits. Cette dernière table associe des articles à un client potentiel. La génération des tables s’effectue à l’aide d’un script SQL standard, à l’exception des champs identifiant d’un type propre à MySQL : auto_increment. En utilisant ce type de champ, vous simplifiez votre développement mais diminuez sa portabilité.

2. Définissez la connexion

La base de données créée, il vous faut maintenant établir un lien entre le serveur d’application PHP et MySQL. Comme ce lien sera utilisé à la fois dans le formulaire et dans la page de confirmation, vous devez factoriser le code correspondant à la connexion à la base de données, dans un fichier de variables. Précisez le nom de la base, celui du serveur, le login et le mot de passe de l’utilisateur. Ouvrez ensuite la connexion avec la base.

3. Affichez les produits dans le formulaire

Comme la plupart des contrôles utilisés dans les formulaires se ressemblent (par exemple la validation des e-mails), créez une librairie de fonctions à laquelle vous pourrez recourir dans tout formulaire de votre site. La première fonction affiche les produits stockés dans la base de données, sur lesquels l’internaute demande des informations. Toutes les fonctions débutent par la déclaration “function“, suivie du nom de la fonction ainsi que des éventuels paramètres à lui passer. Pour celle-ci, commencez par récupérer les produits dans la base. Puis, pour chacun d’eux, créez une ligne du formulaire à l’aide d’une boucle “While“. La seule subtilité de la ligne commençant par “echo” est le nom de la variable “produits[]“, qui doit absolument contenir les caractères “[]“. Cela indique à PHP que cette variable est de type Array (tableau).

4. Contrôlez la validité de l’adresse e-mail

La seconde fonction sert à vérifier la validité de l’adresse e-mail saisie par l’internaute. Pour simplifier le traitement, recourez aux expressions régulières, un des points forts de PHP. Cette fonction retournera “1” par défaut si le test est positif et “0” s’il a échoué. Afin de vérifier la validité de la variable “$email“, testez la structure de la chaîne de caractères, laquelle doit toujours être séparée par le caractère “@“. Seconde règle de validation, le suffixe du nom de domaine doit être compris entre 2 (“.fr” par exemple) et 3 caractères (“.com“). Utilisez pour cela le filtre “[a-z]{2,3}“. Enfin, seuls les caractères allant de 0 à 9 et de A à Z sont acceptés de part et d’autre du symbole “@“. Les tirets et les points sont également autorisés. Le filtre “[0-9a-z]([-_.]?[0-9a-z])” de part et d’autre du caractère “@” le précise.

5. Vérifiez que le client n’existe pas déjà

Si vous souhaitez vérifier que le client est déjà présent dans la base de données, passez son nom et son e-mail à la fonction. Utilisées dans la clause “WHERE” de la requête SQL, ces informations déterminent formellement la présence du client. Lorsque les données sont déjà présentes, la fonction retourne “TRUE” ; “FALSE” dans le cas contraire.

6. Stockez les demandes d’informations

Une fois les informations vérifiées, insérez-les dans la base de données. Cette action peut également être formalisée par une fonction qui, pour être active, nécessitera l’ensemble des variables saisies dans le formulaire. La logique impose de stocker d’abord les données concernant le client et seulement ensuite les relations entre clients et produits. Vous récupérez ainsi au passage l’identifiant du client fraîchement inséré. Pour affecter les produits au client, utilisez une boucle “While“, dont la condition “(list($key, $val) = each($produits))” sert à passer une à une les variables du tableau “$produits“. Insérez une ligne de données à chaque tour de la boucle.

7. Assemblez les fonctions

Ce travail de préparation terminé, reste à assembler les différentes fonctions suivant l’usage que vous souhaitez en faire. Commencez par inclure la librairie de connexion à la base, ainsi que celle destinée aux formulaires de votre site. Précisez ensuite à PHP que vous ne voulez ajouter des informations dans la base que si l’e-mail est valide et que le client n’existe pas déjà. Si ces conditions sont respectées, la fonction “InsertProduitsClients()” se charge de cette insertion de données. Mais si une erreur survient, il faut pouvoir indiquer à l’internaute où elle se situe, afin qu’il la corriger. Pour cela, testez de nouveau les variables et affichez le résultat à l’aide d’une structure de type “echo VerifMail($email) ? “” : “Votre email n’est pas valide“;”. Elle correspond exactement à une structure “if … then …else“, mais a le mérite d’être plus condensée.

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


Frédéric Bordage