Page d'accueil | Contact | Plan | Droits d'auteur | Login membres

Visitez quelques sites des membres d'Eklesia.net

Niveau avancé
Générateur de formulaires

Cet outil présente l’intérêt de regrouper dans une table unique (séparée du code de traitement) l’ensemble des information permettant ...
 de générer le formulaire,
 de faire les controles (actuellement seulement les champs obligatoires),
 de réafficher si nécessaire le formulaire partiellement rempli
 de mettre en forme le message courriel, de l’expédier et de remercier le client !

L’exemple traité ci-dessous est visible ici http://melan.sgdf.fr/article.php3 ?id_article=55
Un exemple plus complet est visible en http://melan.sgdf.fr/rubrique.php3 ?id_rubrique=14

0) Le module outil "formulaire_inc.php"

Il est fourni en document ci-joint. À vous de le placer dans votre dossier d"includes".

1) Squelette : rubrique ou article d’accueil

 en tête, appeler (en dernière) la feuille de style spécifique : <link rel="stylesheet" href="../includes/formulaire.css" type="text/css">  ;
 dans la bonne division, appeler le module php contenant la table formulaire :
<INCLURE (../includes/form_rub14.php) >
Note : Il est nécessaire d’appeler ce module à partir d’un squelette de rubrique ou d’article (qui sera donc une rubrique ou un article spécifique à cet usage), il ne semble pas possible d’assurer les "include" nécessaires à partir du corps d’un article.

2) Module php contenant la table formulaire

Ce module ne contient que la construction du tableau "$T_form", puis l’appel au module de traitement "formulaire_inc.php"
Note : il s’agit d’un module php simple, ce n’est pas un squelette (pas de traitement par le moteur de SPIP)

Forme générale


<?php
### Formulaire de demande de renseignement ###
#
# (libellé : commande ; nom variable ; valeur initiale ; param1 ; param2 ; obligatoire)
$T_form = array (
"Demande de renseignements ; form ; id_article=55 ; feuxnouveaux@sgdf.fr ; ; ;",
"Votre identité :   ; table    ;         ;  ;    ;    ;      ",
"Nom                ; text     ; nom     ;  ; 24 ; 48 ; oblig",
"Prénom             ; text     ; prenom  ;  ; 24 ; 24 ;      ",
"Adresse messagerie ; text     ; mel     ;  ; 32 ; 80 ; oblig",
"Dates envisagées   ; text     ; dates   ;  ; 32 ; 80 ; oblig",
"Vos questions      ; textarea ; message ;  ; 8  ; 32 ; oblig",
"Envoyer la demande ; submit   ; action  ; envoyer ; ; ;     ",
);    

$debug=1;    // activer le mode "debug" pour les tests
include ("./includes/formulaire_inc.php");
?>

À noter que vous pouvez personnaliser le texte de bonne exécution en assignant une variable $merci = "Votre message de remerciement..." ; avant l’instruction include.

3) Construction de la table formulaire "$T_form"

C’est une liste de chaines de caractères. Chaque chaîne comprend 6 éléments séparés par un point virgule :
 Libellé à afficher en colonne de gauche
 Code de traitement
 nom de la variable
 valeur initiale
 paramètre 1 (usuellement taille du champ)
 paramètre 2 (usuellement nombre de caractères max)
 contient code "oblig" pour indiquer que ce champ est obligatoire

Le formulaire est constitué d’un ensemble de "blocs" formé de tables jointives. Ce procédé permet un minimum de souplesse de présentation...

3.1) En-tête obligatoire
 libellé : Affiché en titre au dessus du formulaire
 code : "form"
 nom : indication de l’article SPIP ou de la rubrique SPIP appelant : id_article=55 ou id_rubrique=14
 valeur : adresse Mél où envoyer le message

3.2) ouverture de bloc
 libellé : affiché en première ligne du bloc
 code : "table"
On peut répéter l’ouverture de bloc à plusieurs reprises. La fermeture de bloc est gérée automatiquement.

3.3) Ligne intermédiaire
(pour délimiter un secteur particulier d’un bloc)
 libellé : affiché en pleine ligne dans un "grisé"
 code : "ligne" Répété "ad-libitum"

3.4) Champ texte
 libellé : Affiché en colonne de gauche
 code : "text"
 nom : nom de variable au choix (ce nom ne réapparait pas en dehors du traitement HTML/PHP)
 valeur : valeur initiale éventuelle, sinon vide
 p1 : taille du champ
 p2 : nombre max de caractères
 oblig : code "oblig" si champ obligatoire

3.5) Zone de texte
 libellé : Affiché en colonne de gauche
 code : "textarea"
 nom : nom de variable au choix
 valeur : valeur initiale éventuelle
 p1 : nombre de lignes
 p2 : nombre de colonnes
 oblig : code "oblig" si champ obligatoire

3.6) Choix sur menu
(menu simple ou menu à choix multiple)

Ligne de déclaration
 libellé : Affiché en colonne de gauche
 code : "select" ou bien "sel_mul" pour un menu à choix multiple
 nom : nom de variable au choix (nom partagé avec toutes les lignes "option" qui suivent)
 valeur : n/a (non applicable)
 p1 : nombre de ligne affiché
 p2 : n/a
 oblig : code "oblig" si champ obligatoire

Ligne option
(autant de lignes que d’options)
 libellé : Affiché dans le menu
 code : "option"
 nom : le même que dans la ligne de déclaration
 valeur : un identifiant de valeur au choix (ce nom ne réapparait pas en dehors du traitement HTML/PHP)
 p1 : noter "1" pour le(s) option(s) préselectionnée(s)

fin de menu
(obligatoire pour fermer la structure)
 libellé : n/a
 code : "/select"

3.7) Boutons "Radio"
Ligne de déclaration
 libellé : Affiché en colonne de gauche
 code : "libelradio"
 nom : nom de variable au choix (nom partagé avec toutes les lignes "radio" qui suivent)
 valeur : n/a
 p1 : n/a
 p2 : n/a
 oblig : code "oblig" si champ obligatoire

Bouton
 libellé : Affiché à coté du bouton
 code : "radio"
 nom : le même que dans la ligne de déclaration
 valeur : un identifiant de valeur au choix (cette valeur sera affichée dans le message envoyé)
 p1 : noter "1" pour le(s) option(s) préselectionnée(s)

Fin de choix radio
(fermeture de la ligne du tableau)
 libellé : n/a
 code : "/radio"

3.8) Cases à cocher Ligne de déclaration
 libellé : Affiché en colonne de gauche
 code : "libelcheck"
 nom : n/a
 valeur : n/a
 p1 : n/a
 p2 : n/a
 oblig : n/a (impossible de demander un remplissage obligatoire)

Bouton
 libellé : Affiché à coté du bouton
 code : "checkbox"
 nom : nom de variable au choix
 valeur : un identifiant de valeur au choix (cette valeur sera affichée dans le message envoyé)
 p1 : noter "1" pour le(s) option(s) préselectionnée(s)

Fin de choix
(fermeture de la ligne du tableau)
 libellé : n/a
 code : "/checkbox"

3.9) Fin de formulaire
 libellé : Texte à côté du bouton d’envoi
 code : "submit"

4) Test et mise en service

"Mode debug" Si vous positionnez la variable $debug=1 ; avant d’appeler le module formulaire_inc, il n’y a pas de courriel envoyé, mais son contenu s’affiche à l’écran pour contrôle.
Dès que tout est correct, remettez à zéro ou suprimez simplement la ligne !

Attention : Le système n’expédie un message... que s’il y a un "serveur de mesagerie" dans la configuration ! Ce qui n’est presque jamais le cas dans nos machines personnelles. Vous ne pourrez donc "lancer un message" que quand votre logiciel sera installé sur votre serveur public.

Attention aussi que certains hébergeurs interdisent ou limitent l’utilisation de l’instruction PHP "mail".

Dossier compressé - formulaire_inc.php et formulaire.css