Les formulaires

Laurpierre Messages postés 4 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 18 septembre 2008 - 12 févr. 2007 à 18:02
Laurpierre Messages postés 4 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 18 septembre 2008 - 13 févr. 2007 à 13:43
Bonjour,
Je suis tout neuf sur cet site. Histoire de me faire baptisé, je propose un logiciel de gestion dynamique de formulaires en php (multi pages).
Ce logiciel est réalisé en php V5 ou V4 (un process 'generphp.exe' permet de passer de la version V5 en V4 et vice-versa). Il comporte quelques 1500 instructions (à vrai dire, je n'ai pas compté scrupuleusement, mais il est conséquent)

La principale contrainte est une lecture attentive de la documentation.

L'objectif est de réduire au maximum la programmation HTML. Les champs peuvent être initialisés soit dans la page, elle-même, soit dans le moniteur général.

Le contrôle de la saisie est implicite (facultatif? longueur maxi? caractères interdits? etc ...)
L'utilisateur peut ajouter sa fonction personnalisée pour les contrôles de cohérence entre les informations saisies dans les champs. Il peut aussi choisir d'envoyer les résultats par email.

Les champs peuvent être supprimés ou ajoutés dynamiquement en fonction des souhaits de l'utilisateurs.

Il est d'évidence que nombre d'améliorations sont à apporter, quant à la simplification d'utilisation!

La documentation et les sources sont en téléchargement libre sur la page:
      www.pierre.laur@fr.fr/demo.php


ci-dessous, je joins la documentation:
DOCUMENTATION


POUR TESTER LES SCRIPTS Il FAUT CLIQUER SUR LE LIEN 'Exemples de script php'
IL EST POSSIBLE DE TELECHARGER LES SOURCES ET DE LIRE LA DOCUMENTATION
SUR L'ONGLET: "Téléchargement de fichiers (comptage)"




DANS UN MOIS, UNE NOUVELLE RELEASE (COMPETE) SERA DISPONIBLE EN TELECHARGEMENT.
LA VERSION ACTUELLE PROPOSE UN EXEMPLE DE FORMULAIRE AVEC PLUSIEURS PAGES.
 ----------------------------------------------------------------------------
LE SCRIPT 'Sample_More_Forms.php' PERMET DE TESTER UN FORMULAIRE SUR UNE OU PLUSIEURS PAGES


LES PARAMETRES:
  P_Destinataire  = adresse_email du destinataire [facultatif]
  [facultatif]     si présent: on envoie le résultat du formulaire à ce destinataire


  P_ListPages      = Liste des pages: (titre de la page=nom complet qui contient la page)
  [facultatif]       titre_page_1=path_and_namefile_page1|
                     titre_page_2=path_and_namefile_page2|...etc


  P_RepertoryFile  = Nom du fichier qui décrit les fichiers à télécharger (nécessaire)


  P_Return         = Nom_de_la_page_de_retour
  [facultatif]       si présent: on se connecte après l'éxecution de ce script
                     sur le Nom_de_la_page_de_retour


  P_FuncUserControl = Nom_du_script_de controle_de cohérence_des_informations
  [facultatif]        Ce script est réalisé par l'user.
                      Il est appellé après la saisie d'informations
                      lorsque le souscripteur a validé la page ou la dernière page
                      Un exemple d'une telle fonction est décrit dans le script
                      'MyFuncUserControl.php'
                       - Il contrôle que le champ 'Prenom' [Page 1, champ 'Prenom']
                         n'est pas 'paul'
                       - Il met le champ 'Prenom' [Page 1, champ 'Prenom'] à 'Pierre'
                         si le champ 'Nom' [Page 1, champ'Nom'] est à 'laur'
                       - Il contrôle que la sélection 'Select_Liste_1' [Page 2,
                         champ'Select_Liste1'] doit être différente de 'Choix_2'
                         si la sélection 'Select_Liste_2' [Page 2, champ'Select_Liste2']
                         est 'Select_2'
                       - Il contrôle que, si le champ 'Prenom' [Page 1, champ 'Prenom']
                         commence par la lettre 'x', la sélection du champ 'Select_Liste_2'
                         [Page 2, champ'Select_Liste2'] n'est pas 'Select_3'


  P_FuncUserSend    = Nom_du_script_envoi_email
  [facultatif]        si présent: ce script est appellé après la saisie des informations
                      sur la dernière page, lorsque le souscripteur a validé la dernière page
                      Ce script remplace la procédure, par défaut d'envoi de script par e_mail


 


 OBJECTIF
 -  Réduire au maximale l'écriture HTML, en utilisant les ressources du serveur.
 -  Rendre dynamique l'affichage des pages  (modifiable en fonction des informations
    saisies sur les pages précédentes)
.-  A chaque champ de saisie, un champ message est associé.
    Ce champ message contient des éventuels messages d'erreur ou des explications
    fournies à l'utilisateur qui remplit le formulaire.


 


  Les procédures sont réalisées pour être exécutées soit sous version php4 soit php5
  Pour permettre une mise au point plus 'aisée' les instructions spécifiques php5 sont
  mises en commentaires et vice versa pour les instructions spécifiques php4
  Un outil ('generphp.exe' permet de passer d'une version à l'autre)


/////////////////////////////////////////////////////////////////////////////////////////////
La syntaxe:
  1) un script de formulaire doit impérativement commencer par les instructions
     ci-dessous (placées après la balise <head>:
     <?php
       //Création Object $Daemon
       $Daemon = new Obj_DaemonForm(TRUE);
       $ObjForm = &$Daemon->FormsPage(_PAGE_);
       if (!$ObjForm->GetCountObjGet())
       {   //Déclaration des champs (cf LES OBJETS CHAMPS DE FORMULAIRES)
           .../...
       }
      ?>
      <title><?php echo $Daemon->GetTitlePage(_PAGE_); ?></title>
  
  2) Le lancement du formulaire doit respecter la syntaxe ci-dessous:
      </head>
     
      <?php echo $Daemon->StartForm(_PAGE_); ?>
 
  3) Affichage des champs
      <?php echo $ObjForm->TextHTML("Mon_nom_de_champ"); ?>
      <?php echo $ObjForm->TextHTMLMsg("Mon_nom_de_champ"); ?>
        etc ...




  4) Fin du formulaire
      <?php echo $Daemon->EndForm(); ?> 
     
      </html>


  5) L'utilisateur peut rajouter des fonctions Javascript.
     Dans ce cas, il doit le notifier le type d'évènement et le nom du script
     dans la déclaration du champ.
     (cf LES OBJETS CHAMPS DE FORMULAIRE *4 Les Fonction Java Script)


////////////////////////////////////////////////////////////////////////////////////////
LES OBJETS CHAMPS DE FORMULAIRES


DANS TOUS LES CAS SI LA BALISE "size" EST PRESENTE DANS LE PARAMETRE 'style du champ '
MESSAGE, ELLE EST REMPLACEE PAR LA TAILLE REELLE DE LA LONGUEUR DU MESSAGE A AFFICHER


       LES PAGES: 'page_1.php' ET 'page_2.php'
       SERVENT D'EXEMPLES POUR L'UTILISATION DE CES FONCTIONS




*1 style
 exemple "class="Nom_ de_la classe" size="##" col=`"##" "  etc..




*2 Les Fonction Java Script exemple: $ArrayFunctionsJavaScript array ( "onKeyDown">  "CheckUpSizeString",
                                              "onKeyUp"   =>  "CheckUpSizeString",
                                              "onChange"  =>  "CheckUpValidChar"


-------------------------------------------------------------------------------
1) CHAMP 'GETTEXT'
  RETURN
    retourne l'index de l'objet ajouté
    sinon retourne FALSE et $MyForm->AffichMsg() affiche la nature de l'erreur
    Les erreurs possibles;
    - nom du champ déjà utilisé       
    - erreur sur le type du champ
    - erreur sur la nature du champ
    - erreur sur le nombre maximal de caractères autorisés
    - erreur sur le nombre minimal de caractères autorisés
    - erreur sur l'attribut du champ


  APPEL
    $MyForm->AddObj_GetText(
     PARAMETRES:
     1=> style du champ 'MESSAGE' correspondant au champ 'GETTEXT'(*1) [par défaut ""]
     2=> un contenu initial du champ 'MESSAGE'                         [par défaut ""]
     3=> style du Champ 'GETTEXT' (*1)                                 [par défaut ""]
     4=> nom du champ 'GETTEXT' (name="nom_du_champ'
     5=> Nature du champ 'GETTEXT' soit 'input' soit 'textarea'   [par défaut 'imput']
     6=> Type du champ 'GETTEXT'
         "N" pour numérique
           exemples:
           "N"         => valeur entière non limitée
           "N####"      => valeur entière sur 4 chiffres maxi
           "N####-"     => valeur entière (signée) sur 4 chiffres maxi
           "N####.##-" => valeur (signée) sur 4 chiffres entier maxi et 2 décimales maxi
           "N0.##-"     => valeur décimale (signée) sur 2 chiffres maxi (pas d'entiers)
           "N.-"       => valeur entière et décimales (signée) sans limitation de chiffres
         "S" pour string        
         "E" pour adresse e_mail
         "AAAA-MM-JJ" => date ('-' ou ':' ou '/')
         "MM-AAAA-JJ" => date ('-' ou ':' ou '/')
         "JJ-MM-AAAA" => date ('-' ou ':' ou '/')
     7=> TRUE si optionnel                                [par défaut FALSE]
     8=> Nombre maximal de caractères autorisés           [par défaut 'illimité']
     9=> Nombre minimal de caractères autorisés           [par défaut 'illimité']
    10=> contenu initial du champ 'GETTEXT'               [par défaut ""]
    11=> attribut du champ 'GETTEXT'
         peut-être 'text', 'password', etc..              [par défaut 'text']
    12=> Tableau d'éventuelles fonctions Java Script(*2)  [par défaut ""]
    13=> ID du champ 'GETTEXT' (id="id_du_champ")         [par défaut "nom du champ"]
                              )


 


 -------------------------------------------------------------------------------
2) CHAMP 'SELECT'
  RETURN
    retourne l'index de l'objet ajouté
    sinon retourne FALSE et $MyForm->AffichMsg() affiche la nature de l'erreur
    Les erreurs possibles;
    - nom du champ déjà utilisé
    - nom du champ 'SELECT' non renseigné
    - sélection multiple à FALSE et plusieurs options pré-sélectionées
    - Taille du nombre de sélections affichée insuffisant pour permettre
      d'afficher la dernière option sélectionée
    - Taille supérieures aux nombre de lignes nécessaires
    - le tableau, des sélections à afficher, n'est pas rempli
    - Multiple est à FALSE, alors que plusieurs options sont pré-sélectionnées
    - Size doit être supérieur à la dernière option préselectionnée
      (pour être visible sur l'écran)
       
  APPEL
    $MyForm->AddObj_Select(
     PARAMETRES:
     1=> style du champ 'MESSAGE' correspondant au champ 'SELECT'(*1) [par défaut ""]
     2=> un contenu initial du champ 'MESSAGE'                        [par défaut ""]
     3=> style du Champ 'SELECT' (*1)                                 [par défaut ""]
     4=> nom du champ 'SELECT' (name="nom_du_champ'
     5=> tableaux des sélections à afficher(*3)
     6=> TRUE si sélection multiple                            [par défaut FALSE]
     7=> taille du nombre de sélections affichées(*4)          [par défaut 0]
     8=> TRUE si optionnel                                     [par défaut FALSE]
     9=> Tableau d'éventuelles fonctions Java Script(*2)       [par défaut ""]
    10=> ID du champ 'SELECT' (id="id_du_champ")               [par défaut "nom du champ"]




 *3 les sélections à afficher
    La création d'objects sélection: new Obj_OptSelect
    Paramètres:
    1=> $OptGroupLabel     libellé pour regroupement de certaines options
                            peut être FALSE si fin de regroupement impératif
                           (Dans le cas contraire, les options sont regroupées
                             jusqu'au prochain libellé de regroupement)
    2=> $OptGroupStyle     string :attributs du design d'affichage du libellé
                             de regroupement d'options
    3=> $Label;            libellé de l'option, affiché
    4=> $PreSelected;      à TRUE si préselectionné
    5=> $Value;            valeur de l'option, si "" contient $Label
    6=> $Style;            string : attributs du  le design d'affichage:


    Exemple:
     $Options = array( new Obj_OptSelect("","","Select_1"),
                       new Obj_OptSelect("","","Select_2"),
                       new Obj_OptSelect("","","Select_3",TRUE)  );


     $Options = array( new Obj_OptSelect("Première Liste","","Select_1"),
                       new Obj_OptSelect("","","Select_2"),
                       new Obj_OptSelect("Deuxième Liste","","Select_3",TRUE),
                       new Obj_OptSelect("","","Select_4")  );


*4  $Size  définit le nombre d'options à afficher. Si ce nombre est inférieur
           au nombre global d'options (une liste déroulante est affichée
           et une barre de défilement permet de faire défiler les options.
           Si non renseigné (0): le contrôle prend toute la place (verticale)
           dont il a besoin.


 -------------------------------------------------------------------------------
3) CHAMP 'RADIO'
  RETURN


     retourne l'index de l'objet ajouté
    sinon retourne FALSE et $MyForm->AffichMsg() affiche la nature de l'erreur
    Les erreurs possibles;
    - nom du champ déjà utilisé
    - nom du champ 'RADIO' non renseigné
    - le tableau, des options, n'est pas rempli
    - une option a une valeur non renseignée
    - Libellé d'une option non renseigné et alignement Label précisé
    - l'alignement, d'une option avec un libellé précisé, doit etre soit
      'leftt' soit 'right'
    - Une seule option peut être pré-sélectionnée (si plusieurs options pré-sélectionnées


       
  APPEL
     $MyForm->AddObj_Radio(
     PARAMETRES:
      1=> style du champ 'MESSAGE' correspondant au champ 'RADIO'(*1) [par défaut ""]
        2=> un contenu initial du champ 'MESSAGE'                       [par défaut ""]
        3=> style du Champ 'RADIO' (*1)                                 [par défaut ""]
        4=> nom du champ 'RADIO' (name="nom_du_champ'
        5=> tableau des options à afficher (*6)
        6=> TRUE si optionnel                                     [par défaut FALSE]
        7=> Tableau d'éventuelles fonctions Java Script(*2)       [par défaut ""]
        7=> ID du champ 'RADIO' (id="id_du_champ")                [par défaut "nom du champ"]
 


*6 les options à afficher
 La création d'objects sélection: new Obj_OptRadio
    Paramètres:
    1=>           Valeur du bouton radio
    2=>           à TRUE si préselectionné
    3=>           Libellé du bouton radio. Si non renseigné,
                  ce libellé doit être placé dans le script par l'user
    4=>           si Libellé renseigné: doit être soit 'left' soit 'right'
                  pour indiquer si ce label doit être à gauche ou à droite du bouton
    Exemple:
      $MyArrayObj_OptRadio = array(  new Obj_OptRadio("Mr",TRUE,"Mr","left"),
                                     new Obj_OptRadio("Mme",FALSE,"Mme","left"),
                                     new Obj_OptRadio("Mlle",FALSE,"Mlle","left") );
      


       $MyArrayObj_OptRadio = array(  new Obj_OptRadio("M",TRUE),
                                         new Obj_OptRadio("F") );
      
-------------------------------------------------------------------------------
3) CHAMP 'CHECKBOX'
  RETURN
    retourne l'index de l'objet ajouté
    sinon retourne FALSE et $MyForm->AffichMsg() affiche la nature de l'erreur
    Les erreurs possibles;
    - nom du champ déjà utilisé
    - nom du champ 'CHECKBOX' non renseigné
    - le tableau, des options, n'est pas rempli
    - la valeur d'une option n'est pas renseignée
    - Libellé d'une option non renseigné et alignement Label précisé    
    - l'alignement, d'une option avec un libellé précisé doit être 'left' ou 'right'
    - Multiple doit être à TRUE puisque plusieurs options pré-sélectionnées


  APPEL
    $MyForm->AddObj_CheckBox(
    PARAMETRES:
    1=> style du champ 'MESSAGE' correspondant au champ 'RADIO'(*1) [par défaut ""]
    2=> un contenu initial du champ 'MESSAGE'                       [par défaut ""]
    3=> style du Champ 'CHECKBOX' (*1)                              [par défaut ""]
    4=> nom du champ 'CHECKBOX' (name="nom_du_champ'
    5=> tableau des options à afficher (*7)
    6=> TRUE si optionnel                                   [par défaut FALSE]
    7=> Tableau d'éventuelles fonctions Java Script(*2)     [par défaut ""]
    8=> Multiple                                            [par défaut  TRUE]
    9=> ID du champ 'RADIO' (id="id_du_champ")              [par défaut "nom du champ"]
 


*7 les options à afficher
 La création d'objects sélection: new Obj_OptCheckBox (
    Paramètres:
    1=>           Valeur du bouton checkBox
    2=>           à TRUE si préselectionné
    3=>           Libellé du bouton CheckBox. Si non renseigné,
                  ce libellé doit être placé dans le script par l'user
    4=>           si Libellé renseigné: doit être soit 'left' soit 'right'
                  pour indiquer si ce label doit être à gauche ou à droite du bouton
   Exemple:
    $MyArrayObj_OptCheckBox = array( 
                   new Obj_OptCheckBox("Rock",TRUE,"Rock","left"),
                   new Obj_OptCheckBox("Classique",FALSE,"Classique","left"),
                   new Obj_OptCheckBox("Jazz",TRUE,"Jazz","left") );


    $MyArrayObj_OptCheckBox = array( 
                   new Obj_OptCheckBox("Première compétence"),
                   new Obj_OptCheckBox("Deuxième compétence",TRUE),
                   new Obj_OptCheckBox("Troisème compétence") );


 -------------------------------------------------------------------------------
4) CHAMP 'BUTTON'
  RETURN
    retourne l'index de l'objet ajouté
    sinon retourne FALSE et $MyForm->AffichMsg() affiche la nature de l'erreur
    Les erreurs possibles;
    - nom du champ déjà utilisé
    - nom du champ 'BUTTON' non renseigné
    - Type du 'BUTTON' est incorrect
 
  APPEL
    $MyForm->AddObj_CheckBox(
    PARAMETRES:
    1=> style du champ 'MESSAGE' correspondant au champ 'RADIO'(*1) [par défaut ""]
    2=> un contenu initial du champ 'MESSAGE'                       [par défaut ""]
    3=> style du Champ 'BUTTON' (*1)                                [par défaut ""]
    4=> nom du champ 'BUTTON' (name="nom_du_champ'
    5=> type du champ ('button', 'reset', 'submit'
    6=> valeur du champ 'BUTTON                           [par défaut "nom du champ"]
    7=> Tableau d'éventuelles fonctions Java Script(*2)             [par défaut ""]
    8=> Action qui désigne une éventuelle image à afficher          [par défaut ""]]
        Dans ce cas la balise ' permet de rendre le champ 'BUTTON' muet (grisé)    [par défaut FALSE]
   10=> éventuel raccourci clavier pour simuler le click   [par défaut ""]
   11=> ID du champ 'RADIO' (id="id_du_champ")             [par défaut "nom du champ"]
 -------------------------------------------------------------------------------


J'attends votre sanction, si elle est mauvaise, j'ai vidé ma poubelle qui pourra recueillir ces sources.
Arrivederci,

Laurpierre

2 réponses

Epoc22 Messages postés 198 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 novembre 2008 1
13 févr. 2007 à 09:17
Euh je ne suis pas l'administrateur mais je me permet tout de même une suggestion : ici c'est un forum pour poser une question. Pour poster ce que tu a poster ici, va dans Ajouter une source (dans ton compte), c'est beaucoup mieux.
Cela dit, ne te sens pas offensé !
@++
0
Laurpierre Messages postés 4 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 18 septembre 2008
13 févr. 2007 à 13:43
Bonjour et merci de ta suggestion. Je suis ton conseil.


Arrivderci, Laurpierre

Laurpierre
0
Rejoignez-nous