DOCUMENTATION SUR LE GESTIONNAIRE DE FORMULAIRES : ClasseForms.php

AUTEUR : FRANCK OBERLECHNER, Ingénieur Système et Réseaux


 

SOMMAIRE

1. Préambule

2. Principe de ré-entrance

3. Installation de la classe

4. Déclaration d'un formulaire

5. Déclaration des objets

6. Controle de saisie des objets

7. Modification de l'état des objets

8. Mise en forme des champs du formulaire

9. Codage de la ré-entrance

10. La gestion des Upload ( Copie d'un fichier local vers le serveur WEB )

11. Les sortie différées

A. TOUS LES EXEMPLES

B. L'historique des modifications de la classe

 


1) PREAMBULE

La classe ClasseForms.php permet de déclarer les éléments d'un formulaire sous forme d'objets. Ils sont ensuite transformés en HTML et associés à du code JAVASCRIPT pour la gestion des interactions entre les objets.

Types d'objets :

Fonctions associées à ces objets :

Une bibliothèque d'objets formulaire DHTML généré par PHP dynamiquement ne présente un intérêt que si elle est compatible avec tous les navigateurs. Les scripts sont donc compatibles avec Internet Explorer (v6+) et Mozilla (1.3+).

Les exemples PHP exécutables sont signalés par l'icone Voir un exemple (si installation achevée) ( la classe doit être installée au préalable )


2) LA RE-ENTRANCE

La gestion des pages est ici simplififiée par le principe de ré-entrance des pages :

Une même page servira à ajouter, modifier, corriger et enfin enregistrer les données du formulaire grace à l'appel en boucle de la page mais à un comportement différent en fonction de l'action précédente.


3) INSTALLATION

Définir un répertoire "include_path" en modifiant le fichier de configuration de PHP %SYSTEMROOT%\PHP.INI sous IIS

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
include_path = "d:/wwwroot/rubappli/communs"

Décompresser dans le répertoire "include_path" du serveur PHP le fichier classeForms.php et le répertoire classeForms (ce répertoire contient toutes les ressources nécessaires à la classe)
On obtient l'arborescence :

    .../Répertoire_Include

    _classePath.php
    classeForms.php
    classeForms <dir>

Editer le fichier _classePath.php et modifier la ligne DEFINE en terminant par un "/" obligatoirement, la constante INCLUDEPATH doit pointer sur le répertoire ou se situe le fichier classeForms.php et _classePath.php

    // PARAMETRAGE :
    DEFINE('INCLUDEPATH','/rubappli/communs/');

C'est tout ! la classe est maintenant exploitable directement

EN OPTION : DEFINITION D'UN THEME DE COULEUR IMPLICITE POUR TOUT LE SITE

Créer un fichier _classeSkin.php dans le répertoire des inclusions

<?php

// 0: Rouge, 1:Bleu, 2:Gris, 4:Vert, 5:Orange
DEFINE('DEFAULT_SKIN', 5);

?>

ce fichier est utilisé par les autres classes classeTableau, classeGrid tous les objets gérés par ces classes bénéficient du même thème de couleurs.

ATTENTION : L'INSTALLATION COMPLETE EST NECESSAIRE POUR TESTER LES EXEMPLES QUI SUIVENT


4) DECLARATION DU FORMULAIRE

On ne peut déclarer qu'un seul formulaire "ClasseForms" par page.

Syntaxe :

<?php

balise de début de code PHP,

ATTENTION LE CODE QUI SUIT DOIT PRECEDER LA BALISE <HTML>

include('classeForms.php');

appel au code de la classe
$f = New Forms; création d'un nouvel objet "formulaire" : $f
$f->frm_Init($readonly,'200px');

Iinitialisation de l'objet :
les 2 paramètres sont optionnels.

1) = true, si on veut qu'une grille ne soit pas modifiée et ne serve que de visu. Une même page PHP peut donc servir à la modification, a l'ajout ou pour une simple visualisation. C'est le codage qui le déterminera
voir le comportement du mode "lecture seule"

2) = '200px', c'est la largeur de la colonne label des champs en mode affichage automatique (voir la fonction frm_Ouvrir() )


$f->frm_Protection();

permet de désactiver le clic droit sur la page (Fonction optionnelle)

Voir un exemple (si installation achevée)

$f->frm_InitUpload($taillemaxi, $chemindestination, $attributsautorises);

 

permet dans le cas de la présence d'un champ Sélecteur de fichier d'activer la fonction UPLOAD : 3 paramètres "chaine de caractères" sont obligatoires :

1 - Le chemin de destination (obligatoire)
2 - La taille maximum du fichier en Octets téléchargeable (optionnel)
3 - Les suffixes de fichiers autorisés (le séparateur étant la virgule "," ) exemple : "DOC,XLS,TXT" (optionnel)



$f->frm_InitConfirm();

permet de demander une confirmation d'enregistrement si tous les tests sont OK avant validation du formulaire


$f->frm_InitPalette($codepalette);

permet d'initialiser la couleur de tous les objets disponbible en une seule ligne :

$codepalette = 1 ( bleu ), =2 (Gris), =3 (Jaune)
La palette par défaut est rouge.
Pour définir de nouvelles palettes modifier le switch/case de la fonction.
voir le rendu

Voir un exemple (si installation achevée)

$f->frm_InitFont("10");

on peut changer la taille de la fonte, par défaut sans appel à cette fonction la taille est = 10

Voir un exemple (si installation achevée)

. Appel à une fonction qui définit les objets ou aux fonctions frm_* directement.

 
. Appel aux fonctions qui modifient les caractéristiques des objets Ces fonctions permettent en fonction de la réentrance de modifier les champs dans leur définition (activation ou non, changer la valeur par défaut, pointage en erreur..)

$ret = $f->frm_Aiguiller();
switch ( $ret ) {...}

Analyse de la ré-entrance voir chapitre traitant le sujet
?>

Fin de définition des objets du formulaire

<html>
<head>
<title>...</title>
</head>
<body>

...
<?php

Insertion ici du code HTML de présentation, les menus titres de fenêtre sont à placer ici.
$f->Ouvrir($modeautomatique);

Affichage des champs définis ci-dessus
2 modes sont possibles ( automatique=par défaut
ou manuel )

Mode automatique :

tous les champs sont placés automatiquement dans l'ordre de leur définition. Ils sont placés dans un tableau à 2 colonnes :
. A gauche : le "label" qui donne la signification du champ
. A droite : le champ.
Tous les champs sont alors alignés.

Mode manuel :

Tous les champs sont à placer manuellement, il est possible de les placer dans l'ordre que l'on veut, plusieurs par ligne. Le "label" n'est pas affiché, il faut le saisir manuellement

voir le chapitre "Affichage des champs en mode manuel"

$f->frm_Fermer(); Pour fermer le formulaire (envoi la balise </FORM> et ferme le tableau ouvert en mode automatique )
?>  

5) DECLARATION DES OBJETS

Tous les champs devoient être unique dans la grille, les éventuels doublons sont signalés.

Le nom des champs doit être en majuscule pour correspondre à leurs valeur retournée par $_POST['NOMCHAMP'].

5.1) CHAMPS TEXTE

Le champ texte permet toute saisie en une seule ligne de données. Ces données peuvent être formatée par des masques.

Syntaxe :

$f->frm_ObjetChampTexte("NOM",array(




"label" => "Nom :",
"attrib" => "RU",
"width" => "100px",
"maxlength" => "20",
"help" => "ceci est le texte de l'aide",
"default" => "Nom par défaut")
);

$f->frm_ObjetChampTexte("TEL",array(




"label" => "Téléphone (*)",
"attrib" => "R",
"default" => "02.50.10.02.03",
"mask" => "##.##.##.##.##")
);

$f->frm_ObjetChampTexte("MONEY",array(

"label" => "Mon salaire en € sans les centimes (mask=€#_###.##)",
"attrib" => "N",
"mask" => "€#_###.##",
"help" => "Saisir le salaire à travers le masque, 2 décimales non obligatoire €#_###.##")
);

$f->frm_ObjetChampTexte("DATE_1",array(
"label" => "Date manuellemen ou avec calendrier (attrib=DP)",
"attrib" => "DP",
"default" => "TIMER",
"help" => "Saisir une date ou la sélectionner dans au calendrier")
);

Détail des paramètres:

Voir un exemple (si installation achevée)

 


 

5.2) CHAMPS MEMO ET EDITEUR DE TYPE WORD

Le champ mémo permet toute saisie libre en une ou plusieurs lignes.

Le champ editeur permet une saisie formatée comme un éditeur de type WORD l'objet utilise l'excellente librairie FCKeditor un peu lourde à charger à la 1ere visite mais ne fois dans le cache du navigateur quelle puissance !

Syntaxe :

$f->frm_ObjetChampMemo("MEMO", array(



"label" => "Champ Mémo",
"attrib" => "RU",
"default" => "Ceci est la valeur par défaut passé au champ ",
"help" => "Saisie libre dans cette zone",
"width" => "400px")
);

$f->frm_ObjetEditeur("EDITEUR", array(




"label" => "Champ Editeur",
"width" => "400px",
"height" => "150px",
"default" => "Ceci est la <b>valeur par défaut</b> passé au <um>champ \"Editeur\"</um><br>Le contenu de ce champ est évidemment à sauvegarder dans un champ mémo")
);

Détail des paramètres:

"D" : préformate la saisie au format date "jj/mm/aaaa", la saisie de l'année sur 2 caractères est automatiquement complétée à 4. ( en ajoutant "P" un bouton calendrier est ajouté à droite )
"T" : préformate la date au format "timestamp" jj/mm/aaaa hh:mm, un bouton calendrier est rajouté automatiquement la saisie manuelle n'est pas possible
"H" : format de saisie HH:MM

 

MEMO = rows : le nombre de lignes du champ

EDITEUR = height: hauteur de la zone de saisie en pixels




Si le formulaire est en lecture seul toute la barre d'outils disparait :

Voir un exemple (si installation achevée)


 

5.3) CHAMPS LISTES SIMPLES ET COMPLEXES

 

5 fonctions permettent de gérer des listes de manière différente :

  • frm_ObjetListe : liste simple on choisit un élément de la liste
  • frm_ObjetListeLongue : filtrage d'une liste avec de nombreux éléments pour simplifier la recherche
  • frm_Objet2Listes : création de 2 listes en liaison. La valeur retournée est la valeur du fils sélectionnée. les valeurs sont passées en un seul tableau de "hash" qui doit être de la forme :

    array( "1" => "Valeur Père 1", "2" => "Valeur Père 2",
    "1.1" => "Valeur fils 1 du père 1", "1.2" => "Valeur fils 2 du père 1",
    "2.1" => "
    Valeur fils 1 du père 2 ", "1.2" => "Valeur fils 2 du père 2 "
    ... )

  • frm_ObjetListeEditable : comportement "combo box", choix de valeur parmi une liste avec la possibilité de saisir une valeur propre. Le champ de données est caché et à pour nom le nom du champ "NOMDUCHAMP", la valeur de saisie se nomme "NOMDUCHAMP_EDIT". Quand la valeur n'est pas dans la liste les caractères du champ deviennent italique et la valeur retournée par "NOMDUCHAMP" = -1
  • frm_ObjetListeBascule : création de 2 listes avec possibilité de faire glisser des valeurs de droite à gauche et réciproquement.
    - Les indices des lignes sélectionnées sont concaténées dans un seul champ (caché) avec la virgule "," comme séparateur. Ce champ se nomme "NOMDUCHAMP".
    - La valeur par défaut fonctionne de même : si les indices 1,3,4 sont passés par défaut alors default = "1,3,4"

Syntaxe :

$f->frm_ObjetListe("LISTE_NORMALE", array(




"label" => "Liste déroulante ",
"title" => "----- Choisir une VILLE -----",
"default" => "5",
"help" => "choisir une ville de la liste",
"width" => "200px"),
$tableau1
);
 

$f->frm_ObjetListe("LISTE_OBLIG", array( "label" => "Capitale (*)",
"attrib" => "R",
"default" => "5",
"help" => "choisir OBLIGATOIREMENT une ville de la liste",
"width" => "200px"),
$tableau1
);
 
$f->frm_ObjetListe("LISTE_LNG", array(
"label" => "Liste normale",
"default" => "3",
"rows" => 5,
"help" => "choisir une ville de la liste",
"width" => "200px"),
$tableau1
);
 
$f->frm_ObjetListeLongue("LISTE_LONGUE" ,array(
"label" => "Liste longue avec filtre (*)",
"default" => "2",
"attrib" => "RU",
"rows" => "4",
"help" => "Utiliser le champ de filtrage pour trouver et choisir une ville",
"width" => "200px",),
$tableau1
);
 
$f->frm_Objet2Listes("LISTE_VERT", array(
"label" => "2 listes en liaison (V)",
"orientation" => "V",
"default" => "2.2",
"help" => "choisir une option et une sous-option",
"width" => "200px",
"title1" => "---choisir la ville---",
"title2" => "---choisir la curiosité---")
,
array( "1" => "Paris", "2" => "Lyon",
"3" => "Marseille", "4" => "Toulouse",
"1.1" => "Tour effel", "1.2" => "Sacré coeur",
"2.1" => "Fourvière", "2.2" => "Bellecour",
"3.1" => "Canebière", "3.2" => "Notre dame de la garde",
"4.1" => "Capitole", "4.2" => "Saint-Sernin")

);
 
$f->frm_ObjetListeEditable("Liste", array(
"label" => "Liste éditable",
"attrib" => "RI",
"default" => "Bruxelles",
"width" => "200px",
"help" => "Saisir une valeur de la liste ou saisir une nouvelle (les valeurs hors liste sont en italique)",
),
$tableau1 );
 
$f->frm_ObjetBascule("LISTE_BASCULE", array( "label" => "Listes en bascule",
"default" => "1,2,3",
"attrib" => "R",
"rows"=>"10",
"title1" => "Liste gauche",
"title2" => "Liste droite",
"help" => "choisir au moins une ville",
"width" => "100px"
),
$tableau1 );
 

ATTRIBUTS COMMUNS

MATRICE DES PARAMETRES

PARAMETRES ObjetListe ObjetListeLongue Objet2Listes ObjetListeEditable ObjetBascule
label
X
X
X
X
X
default
X
X
X
X
X
width
X
X
X
X
X
help
X
X
X
X
X
attrib
X
X
X
X
X
rows
X
X
  
 
X
orientation    
X
   
title
X
X
 
 
 
title1, title2
 
 
X
 
X

 

Voir un exemple (si installation achevée)

cas particulier de l'objet frm_ObjetListeEditable :

si l'objet a pour nom "LISTEEDITABLE", la page retourne 2 variables POST issues de champs

  • $_POST['LISTEEDITABLE'] , l'indice dans la table de l'objet sélectionné ou -1 si l'élément n'est pas dans la table (c'est un champ "hidden" )

  • $_POST['LISTEEDITABLE'], le libellé du champ

pour initialiser la valeur de l'objet on dispose de 3 possibilités :

  • soit on passe l'indice de l'élément du tableau (numérique)
  • soit une des valeurs présente dans le tableau (chaine de caractères)
  • ou enfin une chaine quelconque qui n'est pas dans la liste, et qui apparait alors en italique

// ANALYSE DES VALEURS ENREGISTREES

if ( isset($_POST['LISTE_1']) ) {

// SI L'INDICE EST =-1 ALORS C'EST UNE CHAINE QU'IL FAUT PASSER EN VALEUR "PAR DEFAUT"
if ($_POST['LISTE_1']==-1) $def_liste1 = $_POST['LISTE_1_EDIT'];
else $def_liste1 = $_POST['LISTE_1'];

} else {

$def_liste1 = "Bruxelles";

}

 

voir le source de l'exemple ci-dessous

Voir un exemple (si installation achevée)


5.4) CHAMPS COCHES ET BOUTONS RADIO

2 fonctions permettent de manipuler des coches et des boutons radio pour activer au nom des champs liés au choix

frm_ObjetCoche : case à cocher

frm_ObjetBoutonsRadio : Boutons radios

Syntaxe :

$f->frm_ObjetCoche("DEPLACER", array(




"label" => "Mobilité", "title" => "Un déplacement est nécessaire",
"help" => "Sélectionner Si un déplacement est nécessaire",
"default" => "0",
"activation" => array("CHAMP1","CHAMP2","CHAMP3") )
);

 

$f->frm_ObjetBoutonsRadio("BTNSRAD", array(
"label" => "Sexe",
"default" => "1",
"help" => "cocher Homme ou Femme pour choisir un prénom",
"activation" => array("CHAMP1","CHAMP2") ),
$tableau1
);

PARAMETRES COMMUNS

label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.

default : valeur par défaut (indice du tableau ou valeur quelconque possible pour la fonction frm_ObjetListeEditable()

help : bulle d'aide

activation => array("champ1","champ2",...) : permet d'activer un ou plusieurs champs par la case à cocher ou faire correspondre à une option du bouton radio un champ qui s'activera quand elle sera sélectionnée.

noactivation => array("champ1","champ2",...) : permet de désactiver un ou plusieurs champs par la case à cocher ( un seul pour un bouton radio, plusieurs pour une coche)



SPECIFIQUE "BOUTON RADIO"

orientation : V pour vertical, H pour Horizontal

Voir un exemple (si installation achevée)



5.5) SELECTEUR DE FICHIER

L'utilisation du sélecteur de fichier standard HTML a été modifié pour rendre le champ modiifable uniquement par le bouton. Malheureusement on ne peut pas affecter de valeur par défaut à ce champ (limitation HTML)

La fonction de sélecteur n'a d'intéret le plus souvent que pour assurer la fonction UPLOAD. Pour activer cette fonction utiliser frm_InitUpload()

voir la description complete du mécanisme d'upload

Syntaxe :

$f->frm_ObjetSelecteur("SelectFichier",

array(
"label" => "Selecteur de fichier",
"help" => "Sélectionner un fichier",
"attrib" => "R",
"width" => "400px")
);

Voir un exemple (si installation achevée)


 

5.6) CHAMP "SLIDER"

L'utilisation du slider permet une saisie simplifiée et graphique de nombre entier compris dans un intervalle donné

width : c'est la largeur total du bloc graphique en pixels.

size : C'est la largeur du champ texte en nombre de caractères

Syntaxe :

$f->frm_ObjetSlider("Slider01",

array("label" => "Nombre de colonnes ",
"orientation" => "H",
"width" => "80px",
"mini"=> "1",
"maxi"=>"3",
"default" => "2",
"size" => "5",
"help" => "choisir le nombre de colonnes (1,2 ou 3)")
);

$f->frm_ObjetSlider("Slider02",

array("label" => "Nombre de lignes ",
"orientation" => "V",
"height" => "120px",
"mini"=> "1",
"maxi"=>"10",
"default" => "8",
"help" => "choisir le nombre de lignes (1 à 10)")
);

Voir un exemple (si installation achevée)


5.7) CHAMP "TEXTE ET POPUP "

L'utilisation des champs "Texte et popup" permet de faire appel via une fenêtre POPUP a une liste puis en choisissant une valeur le champ est automatiquement mise à jour. L'avantage est dans l'usage de listes longues qui ne sont formées que quand c'est nécessaire.

Une URL est définie c'est elle qui est appelée quand on presse sur le bouton .

Cette URL est soit une fenêtre en HTML (il faut dans ce cas tout gérer, le retour des valeurs compris ) soit une page PHP qui en 10 lignes gère tout (voir syntaxe de la page appelée)

PARAMETRES GENERAUX

label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.

attrib : tous les attributs des champs texte ( R, U, +, -, I ...)

url : nom de la page appelée sans aucun paramètre GET

"url" => "sample19_popup_called.php",

width : largeur du champ texte

return : définit le mode de retour des valeurs (2 cas)

"id" : le champ est composé de 2 champs, un est caché "la clef" l'autre visible "la valeur". Il permet de gérer la paire "clef / valeur" d'une liste HTML

<option value="clef">la valeur affichée</option>

"value" : le champ est unique, il permet une saisie assistée depuis une liste d'élément mais aussi une saisie libre

default : valeur par défaut = indice du tableau ( "return" => "id" ) ou valeur affichée ( "return" => "value" )

defaultview : valeur par défaut affichée dans le champ visible ( "return" => "id" )

help : bulle d'aide

 

PARAMETRES DE MISE EN FORME DE LA FENETRE APPELEE

winwidth, winheight : largeur et hauteur de la fenetre en pixels (implicitement la largeur de la page correspond à celle du champ

rows : hauteur de la liste en nombre de lignes, la liste est centrée automatiquement

param : pour permettre un comportement différent de la fenêtre en fonction de la valeur d'un autre champ, ce paramètre prend le nom d'un autre champ.

exemple ci dessous : une liste de villes permet un pré-choix. Quand on appelle la fenêtre, celle ci recoit en paramètre la valeur de la clef de la ville on peut faire une requête en fonction pour filtrer les valeurs qui lui correspondent.

dans l'exemple ci-dessous, PARAM=1

Syntaxe :

$f->frm_ObjetChampPopup("NOMPOPUP",

array( "label" => "POPUP (avec retour id+valeur)",
"attrib" => "U",
"width" => "200px",
"url" => "sample19_popup_called.php",
"return" => "id",
"default" => "10",
"defaultview" => "SIVOM",
"winwidth" => "240",
"winheight" => "240",
"rows" => "10" )
);

$f->frm_ObjetChampPopup("NOMPOPUPMINI",

array( "label" => "POPUP (taille automatique)",
"width" => "250px",
"url" => "sample19_popup_called.php",
"return" => "id" )
);

PAGE APPELEE

La page appelée est constituée de code javascript et de php. On peut simplifier son codage par l'emploi de la fonction $f->frm_popup_called

paramètre n°=1 : La fonction sait gérer 2 type de tableau : les tableaux javascript à 2 dimensions et les tableaux PHP.

Dans le cas d'un tableau javascript, on passe en chaine 'le nom de la table' à 2 dimensions qui contient les données.

Ce tableau peut être généré par une fonction PHP qui exécute une requête sur une base de données ( voir la fonction de la classe classeBases :
$base->bdd_tableversarrayjs();

var myData1 = [
["12","Action scolaire"],
["22","Action Sociale"],
...
["24","Urbanisme"]
];

Dans le cas d'un tableau php, on passe en paramètre le tableau à 2 dimensions qui contient les données.

Ce tableau peut être généré par une fonction PHP qui exécute une requête sur une base de données ( voir la fonction de la classe classeBases :
$tableservices = $base->bdd_tableversliste()


$tableservice = array( "12" =>,"Action scolaire",
"22" => "Action Sociale",
...
"24" => "Urbanisme");

paramètre n°=2 (optionnel) : nom de la fonction javascript qui est appelée quand la valeur sélectionnée est changée. On peut modifier l'état d'objet de la fenêtre appelante par la fonction javascript :

window.opener.document.forms[params['FORMULAIRE']].elements['CHAMP_A_MODIFIER].value = 'xxx';

ou bien

window.opener.document.forms[params['FORMULAIRE']].elements['CHAMP_A_MODIFIER].disabled=true;

paramètre n°=3 (optionnel) : afficher ou non les boutons "OK", "VALIDER", "EFFACER" (true ou false) par défaut ils sont affichés.
"EFFACER" permet d'éffacer completement le champ sinon c'est impossible autrement

paramètre n°=4 (optionnel) : Tous les valeurs sont strictement numérique, toutes les autres lignes qui ont une valeur non numérique ne sont pas sélectionnables

PAR DEFAUT TOUTES LES VALEURS DOIVENT ETRE NUMERIQUES

Cette astuce permet de créer dans la liste des séparateurs qui sont inertes (les lignes de séparation et blanche.

 

<?php

$tablearticles = array();
$tablearticles['A0'] = "------ AGENT ---------------------------------";
if (empty($tableart_agent)) {
$tablearticles['A1'] = " L'agent n'a pas d'article !";
} else {
foreach ( $tableart_agent as $valeur => $libelle) $tablearticles[$valeur] = $libelle;
}
$tablearticles['S0'] = "";
$tablearticles['S1'] = "------ SERVICE ---------------------------------";
if (empty($tableart_service)) {
$tablearticles['S2'] = " Le service de l'agent n'a pas d'article !";
} else {
foreach ( $tableart_service as $valeur => $libelle) $tablearticles[$valeur] = $libelle;
}

$tablearticles['T0'] = "";
$tablearticles['T1'] = "------ TOUS LES ARTICLES ---------------------------------";
foreach ( $tableart_tous as $valeur => $libelle) $tablearticles[$valeur] = $libelle;

?>

Dans l'exemple ci dessous on concatène 3 tableaux et on insère entre chaque des séparateurs inertes dans la valeur est ALPHABETIQUE

 

Syntaxe d'une page appelée :

CODE AVEC TABLEAU JAVASCRIPT CODE AVEC TABLEAU PHP

<HTML>
...
<BODY>

<SCRIPT language="javascript">

var myData1 = [
["12","Action scolaire"],
["22","Action Sociale"],
...
["24","Urbanisme"]
];

function externe() {
alert('appel a une fonction externe !');
}

</SCRIPT>

<?php

include('classeForms.php');
$f = New Forms;

$f->frm_Init();
$f->frm_popup_called('myData1','externe()');

?>
</body>
</html>

<HTML>
...
<BODY>
<?php

$myData = array( "12"=>"Action scolaire",
"22"=>"Action Sociale",
"26"=>"Bâtiments",
"19"=>"Bibliothèque",
...
"10"=>"SIVOM",
"15"=>"Sports",
"24"=>"Urbanisme"
);

include('classeForms.php');
$f = New Forms;

$f->frm_Init();
$f->frm_popup_called($myData);


?>
</body>
</html>

FONCTION DE LA CLASSE PHP "classeBases" POUR GENERER UN TABLEAU
$base->bdd_connecter_base("svpinfo");

$requete = "SELECT * FROM article,Modele ORDER BY art_numinv";

$base->bdd_execsql($requete);
$base->bdd_tableversarrayjs( array("art_id","art_numinv","mod_nom"),"NomTableauJS" );
}
$base->bdd_connecter_base("svpinfo");

$requete = "SELECT * FROM article,Modele ORDER BY art_numinv";

$base->bdd_execsql($requete);
$tableservices = $base->bdd_tableversliste( array("art_id","art_numinv","mod_nom") );
}

 

Voir un exemple (si installation achevée)


5.8) CHAMP "ARBRE HIERARCHIQUE "

L'utilisation des champs arbres permet de choisir une valeur dans un arbre

PARAMETRES GENERAUX

label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.

attrib : les 2 attributs qui restent ( R, + ) sont "obligatoire" et "lecture seule"

width : largeur du champ

height : hauteur du champ

default : valeur par défaut = indice du noeud dans le tableau

lines : fait apparaitre les lignes ou non ( true | false )

rootselector : la racine de l'arbre est sélectionnable ( "true" si oui )

iconroot : nom complet (chemin inclus) de l'image de l'icone qui symbolise la racine de l'arbre

icondirclosed, icondiropened : nom de complet de l'image de l'icone qui symbolise un dossier ouvert ou fermé


$tableauTree : est le tableau de tableau de valeurs avec 3 champs :

  • L'indice de l'enregistrement
  • Le titre du noeud
  • l'indice père ( -1 si racine de l'arbre )

Syntaxe :

$tableauTree =

array(

array("0","France (0)",-1),
array("1","Paris (1)",0),
array("2","Marseille (2)",0),
array("3","Lyon (3)",0),
array("4","Place de la Concorde (4)",1),
array("5","Montmartre (5)",1),
array("6","Vieux port (6)",2),
array("7","Notre Dame de la Garde (7)",2),
array("8","Place Bellecourt (8)",3),
array("9","La croix rousse (9)",3),
array("10","Invalides (10)",1),
array("11","Sacré Coeur (11)",5),
array("12","La place du tertre (12)",5),
array("13","Trifouilly (13)",0),

);

   

$f->frm_ObjetChampArbre("FEUILLE1",

array( "label" => "Arbre n°=1 (defaut=5)",
"attrib" => "",
"width" => "300px",
"height" => "150px",
"default" => "5",
"lines" => "false",
"title" => "Nom de l'arbre"
),
$tableauTree
);

$f->frm_ObjetChampArbre("FEUILLE2",

array( "label" => "Arbre n°=3 (defaut=4) LECTURE SEULE",
"attrib" => "+",
"width" => "300px",
"height" => "150px",
"default" => "4"
),
$tableauTree
);

 

Arbre n°=1 : pas de ligne, non obligatoire

Arbre n°=2 : lecture seulement


Arbre n°=3 : personnalisation des icones de l'arbre

 

Voir un exemple (si installation achevée)

 


5.9) CHAMP "SELECTEUR D'ICONES "

L'utilisation du champ sélecteur de couleur (de fond ou de textet) permet de choisir précisement un couleur et retourne une chaine de 6 caractères au format HEXADECIMAL.

PARAMETRES GENERAUX

label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.

attrib : les 2 attributs qui restent ( R, + ) sont "obligatoire" et "lecture seule"

width : largeur standard du champ [optionnel]

default : valeur par défaut de la couleur de fond ou de texte [optionnel], par défaut le fond est vide (blanc) le texte est noir.

target : choix de la couleur du texte "TEXT" ou du fond 'BACKGROUND"

Syntaxe :

   

$f->frm_ObjetColorPicker("LE_FOND",

array( "label" => "Couleur du fond",
"help" => "Saisir une couleur pour le fond",
"default" => "3399CC",
"target" => "background")
);


$f->frm_ObjetColorPicker("LE_TEXT",

array( "label" => "Couleur du texte",
"help" => "Saisir une couleur pour le texte",
"default" => "660033",
"target" => "text")
);



Voir un exemple (si installation achevée)

 


5.10) CHAMP "TIMER"

L'utilisation d'un champ timer permet d'alimenter un champ TIMESTAMP de base de données avec l'horloge du client. Pour gérer l'horloge côté serveur on le fera par programmation.

Le format en retour peut être SQL (AAAA/MM/JJ HH:MM:SS) ou français (JJ/MM/AAAA HH:MM:SS)

PARAMETRES GENERAUX

 

$f->frm_ObjetTimer("MON_TIMER",

array("label" => "Horloge",
"width" => "70px",
"icon" => true / false,
"format" => "french" / "iso"
)
);


 

Voir un exemple (si installation achevée)


5.11) CHAMP "SELECTEUR DE COULEURS " (ColorPicker)

L'utilisation d'un champ timer permet d'alimenter un champ TIMESTAMP de base de données avec l'horloge du client. Pour gérer l'horloge côté serveur on le fera par programmation.

Le format en retour peut être SQL (AAAA/MM/JJ HH:MM:SS) ou français (JJ/MM/AAAA HH:MM:SS)

PARAMETRES GENERAUX

 

$f->frm_ObjetTimer("MON_TIMER",

array("label" => "Horloge",
"width" => "70px",
"icon" => true / false,
"format" => "french" / "iso"
)
);


 

Voir un exemple (si installation achevée)


5.12) CHAMP "LISTE A TRIER " (SortSelect)

L'utilisation d'un champ SortSelect permet de trier une liste

PARAMETRES GENERAUX

label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.

width : largeur standard du champ [optionnel]

default : valeur par défaut préselectionnée dans la liste pas grand interet.

rows : nombre de lignes de la liste

order : chaine qui comprend les indices du tableau trié séparés par une virgule ","

help : Aide en ligne

separators : si la chaine est "true" alors les séparateurs sont autorisés on peut alors insérer ou supprimer un séparateur de lignes

separatorvalue : valeur dans la chaine "ordre" qui sera prise en compte pour signifier le sépérateur ( par défaut = "-" le moins )

separatortext : chaine de caractère qui symbolisera visuellement le séparateur ( par défaut une chaine plusieurs "-" )

Sans l'option "separators"

Avec l'option "separators"

frm_ObjetSortSelect("LISTE_T2"

array(
"label" => "Liste à trier",
"rows" => "10",
"separators" => "true",
"separatorvalue" => "*",
"separatortext" => "___________________________",

"default" => $def2,
"order" => $ordre2,
"help" => "Trier la liste",
"width" => "100px"),
$tableau1
);



avec le hash :

$tableau1 = array( "1" => "1-Paris","2" => "2-Lyon","3" => "3-Marseille","4" => "4-Toulouse","5" => "5-Bordeaux",
"6" => "6-Nantes" );

 

Voir un exemple (si installation achevée)

 

 

 


 

5.20) CHAMP CACHE

L'utilisation du champ caché permet de véhiculer une variable et de la retourner en POST

Syntaxe :

frm_ObjetChampCache("NOMDUCHAMP", "VALEUR_PAR_DEFAUT");


 

5.21) LES ONGLETS

L'utilisation des onglets permet de condenser sur une seule page sans bouger les ascenseurs, un nombre important de champs classés et distribués logiquement. Dans le cas suivant, l'activation de la case à cocher active les champs dépendants de cet objet mais aussi l'onglet du 1er champ de cette liste.

2 fonctions permettent de manipuler les onglets :

frm_OngletDefinir : appelée une seul fois avant la définition du 1er champ

width, height = dimension de l'onglet
space = largeur de tabulation entre le libelle et le champ lui-même
default = "Le nom de l'onglet"

frm_OngletNouveau : Appelée au début de chaque onglet, la femeture de l'onglet est déclenchée par l'appel à un nouvel onglet ou la fin du formulaire

frm_OngletDefaut : Appelée apres la définition des onglets pour Modifier l'onglet qui sera affiché au chargement de la page, indifféremment l'indice ou le nom de l'onglet ( le 1er étant = 0)

$f->frm_OngletDefinir("Adresse"); ou
$f->frm_OngletDefinir(1);

Syntaxe :

$f = New Forms;
$f->frm_Init(false,"150px");

$f->frm_OngletDefinir( array("width" => "550px", "height" => "200px","default" => "Titulaire" ) );

$f->frm_ObjetChampTexte("CHAMP1", ... // ces 2 champs ne sont pas dans les onglets
$f->frm_ObjetChampTexte("CHAMP2", ...

$f->frm_OngletNouveau('Titulaire');


$f->frm_ObjetChampTexte("NOM", ...
$f->frm_ObjetChampTexte("PRENOM", ...
$f->frm_ObjetChampTexte("DATEABON", ...

$f->frm_ObjetCoche("ADRESSEABON",...

$f->frm_OngletNouveau('Adresse');

$f->frm_ObjetChampTexte("NUMRUE", ...
$f->frm_ObjetChampTexte("NOMRUE", ...
$f->frm_ObjetChampTexte("CP", ...
$f->frm_ObjetChampTexte("VILLE", ...

 

En cas de validation du formulaire sans avoir saisi les champs obligatoires, on obtient une erreur sitant le nom de l'onglet et celui du champ incorrect.

Voir un exemple (si installation achevée)


 

5.22) LES SEPARATEURS DE PARAGRAPHES

L'utilisation des séparateurs de paragraphes permet de condenser comme les onglets sur une seule page sans bouger les ascenseurs, un nombre important de champs classés et distribués logiquement.

2 fonctions permettent de manipuler les séparateurs :

frm_EnteteDefinir : appelée une seul fois avant la définition du 1er champ

2 paramètres :

exclusif = ouverture exclusive des paragraphes (l'ouverture d'un par nouveau ferme automatiquement l'ancien paragraphe)
valeur : true / false

sauvegarder l'état = sauvegarde par cookie de l'état des paragraphes
valeur : true / false

frm_EnteteNouveau : Appelée au début de chaque paragraphe, sa fermeture est déclenchée par la définition d'un nouveau paragraphe ou la fin du formulaire

2 paramètres :

titre = titre du paragraphe
valeur : chaine de caractères

Pré-déployé = déploiement automatique du paragraphe
valeur : true / false

Syntaxe :

$f = New Forms;
$f->frm_Init(false,"150px");

$f->frm_EnteteDefinir($modeexclusif,$sauveretat);

$f->frm_ObjetChampTexte("CHAMP1", ...
$f->frm_ObjetChampTexte("CHAMP2", ...
// ces 2 champs ne sont pas dans le 1er paragraphe

$f->frm_EntereNouveau('CHAPITRE N°=1');


$f->frm_ObjetChampTexte("...
$f->frm_ObjetChampTexte("...
$f->frm_ObjetChampTexte("...

$f->frm_EntereNouveau('CHAPITRE N°=2');

$f->frm_ObjetChampTexte(...
$f->frm_ObjetChampTexte(...
$f->frm_ObjetChampTexte(...
$f->frm_ObjetChampTexte(...

COMPORTEMENT EN CAS D'ERREUR DE SAISIE : Les paragraphes sont automatiquement déployés

Voir un exemple (si installation achevée)


 

5.23) LES SCROLLER DE CHAMPS

L'utilisation d'un nombre important de champ et la nécessité de voir en permanence les boutons peut amener à l'emploi de scroller (fonctions CSS standards)

3 fonctions permettent de manipuler les scrollers :

frm_InitScroller(...) : appelée une seul fois avant la définition du 1er champ

4 paramètres :

la largeur en pixel = obligatoire
la hauteur en pixel = obligatoire

la couleur du fond = pour faire ressortir la zone de scroll on peut lui donner une couleur (mettre en blanc par défaut)

le mode automatique ou manuel = en mode automatique tous les champs qui seront définis seront dans la zone de scroll. En mode manuel, il faut ouvrir et fermer la zone de scroll.

frm_ScrollerOpen(), frm_ScrollerClose(): Appelée entre chaque définition de champ, pas de paramètre

 

Syntaxe :

$f = New Forms;

$f->frm_Init(false,"200px");

$f->frm_InitScroller("400","90","#FFE0D2",false);


$f->frm_ObjetChampTexte("Champ1", ...

$f->frm_ObjetChampTexte("Champ2", ...

...

$f->frm_ScrollerOpen();


$f->frm_ObjetChampTexte("Champ3", ...
..

$f->frm_ScrollerClose();

$f->frm_Ouvrir();

Voir un exemple (si installation achevée)Voir un exemple (si installation achevée)

ATTENTION : NE PLACER DANS LA ZONE DE SCROLL QUE DES CHAMPS DE TYPE "TEXTE" CAR SINON LES OBJETS COMPLEXES PEUVENT AVOIR UN COMPORTEMENT IMPREVU (Voir exemple ci-dessous)

Voir un exemple (si installation achevée)les popups sont décallés

 

 


6) CONTROLE DE SAISIE DES OBJETS

    2 modes de saisie des informations peuvent co-éxister :

    6.1) CONTROLE COTE "CLIENT"

    Ce mode de saisie effectué en Javascript est effectué à la volée (cas des attributs "masques" et "N" ) ou à la validation du formulaire ( submit() ) pour l'attribut obligatoire "R" par exemple.

    Controle à la validation, quand un ou plusieurs champs ne sont pas remplis correctement, une fenêtre d'alerte apparait à la validation en donnant la liste des champs à modifier :

    Quand la fenêtre d'alerte est fermée le curseur est positionné sur le 1er champ en erreur.

    Une exception au controle des champs est l'attribut "S" ( submit() ) il est prioritaire sur tout attribut "R", il provoque une sortie du code ( voir chapitre traitant l'attribut "S" )

    La fonction frm_InitConfirm() permet si tous les tests précédents sont OK de demander confirmation d'enregistrement :

    dans le cas d'un ajout
    ou "Enregistrement de la modification ?" dans le cas d'une modification.

    on peut definir un message sur mesure en appelant la fonction par frm_InitConfirm("Message a afficher en cas de validation")

     

    Par la fonction frm_InitConfirmCancel() on peut comme avec la fonction frm_InitConfirm() demander la confirmation pour rétablir les valeurs par défaut. Cette fonction est très pratique dans le cas des grilles qui ont beaucoup de champs à saisir.

    Voir un exemple (si installation achevée)

    6.2) CONTROLE COTE "SERVEUR"

    Ce mode est entièrement à programmer dans la section "aiguillage" de la réentrance (voir schéma)

     


7) MODIFICATION DE L'ETAT DES OBJETS

Les fonctions suivantes permettent de modifier l'état d'un champ (valeur par défaut, activation ou non...) après sa définition mais avant son affichage

7.1) Marquer un champ en erreur

    Lors de la réentrance du formulaire (A1 ou M1), la valeur des champs peut-être testée ( $_POST['NOM_DU_CHAMP'] ) si la valeur ne correspondant pas a celle attendu, il faut marquer le champ par la fonction :frm_ChampEnErreur()

    syntaxe :

    frm_ChampEnErreur('NOMCHAMP','MESSAGE D\'ERREUR');

    exemple :

    //APRES LA DEFINITION DES CHAMPS

    if ( $_POST['CHOIX'] != '3' ) {
    $f->frm_ChampEnErreur("CHOIX", "<h1>ATTENTION</h1>Confort doit etre cochées");
    }
    if ( $_POST['VILLE'] != 'NANTES' ) {
    $f->frm_ChampEnErreur("VILLE", "La ville doit être NANTES");
    }

    // AVANT L'AFFICHAGE DES CHAMPS

    Voir un exemple (si installation achevée)

     

7.2) Activer un champ

    Dans le même principe des autres fonctions du chapitre 7) frm_ChampActif() permet d'activer ou non un champ en fonction de tests et ce quelque soit l'état défini par défaut.

7.3) Définir un champ en lecture seule

    frm_ChampLectureSeule() permet de définir qu'un champ est en lecture seule

 

 

7.4) Initialiser la valeur d'un champ

    Comme la fonction précédente, frm_ChampInitialiserValeur() permet de modifier la valeur par défaut du champ.

    syntaxe :

    frm_ChampInitialiserValeur("NOM_DU_CHAMP","Valeur du Champ");

     

7.5) Initialiser tous les champs

    Comme la fonction précédente, frm_ChampInitialiserValeur() permet de modifier la valeur par défaut du champ de tous les champs déclaré par rapport aux valeurs d'un tableau hash. Ce tableau sera généré par la fonction bdd_resultats_vers_tableau() de la classe "classeBase".

    syntaxe :

    frm_ChargerLesChamps( array("NOMCHAMP1" => "Valeur1", ...) );

     

7.6) Recopier tous les champs de réentrance

    Pour simplifier le codage d'une page réentrante, un seul appel à la fonction frm_ChampsRecopier() permet de donner comme valeur par défaut à tous les champs la valeur $_POST venant de la page précédante. On les trouvera dans la section de code A1 et M1.

    syntaxe :

    case "M1" :

    // SI AUCUNE ERREUR NE SUBSISTE ALORS ON ENREGISTRE LA MODIFICATION ET ON SORT
    if ($cpterreur==0) {
    $requete = $base->bdd_creationrequete("agents","agent_id","M" );
    $base->bdd_execsql($requete);
    header("Location: maj_annuaire.php#".$_POST['AGENT_ID']);
    }
    // SINON ON REAFFICHE LE FORMULAIRE
    $requete = "SELECT * FROM agents WHERE agent_id=" . $_GET['agent_id'];
    $base->bdd_execsql($requete);
    $titrefenetre = "MISE A JOUR DE : " .
    $base->bdd_lire_champ("agent_prenom") ."&nbsp;" .$base->bdd_lire_champ("agent_nom");
    $f->frm_ChampsRecopier();

    break;

7.7) Activer le bouton Valider dès le début de la saisie

    Par défaut le bouton "valider" d'un formulaire est désactivé jusqu'à modification d'un champ dans le 1er appel de la page (A0 ou M0).
    Une fois la page réentrante, le bouton "valider" est toujours activé. La fonction : frm_ActiverBtnValider() permet de forcer l'activation du bouton dès le début de la page.

7.8) Exécuter un code javascript externe à la sortie d'un champ texte (CALCUL par exemple)

    Pour réaliser des calculs entre les champs textes ou toute autre action utiliser l'attribut "script" en placer comme valeur le nom de la fonction javascript executée à chaque sortie ou validation du champ

    exemple "addition()"

    la page doit alors contenir le code spécifique ce code n'est pas géré par classeforms

    <script language="JavaScript" type="text/JavaScript">
    <!--

    function addition() {
    KW_calcForm('AJOUT_RESULTAT',100,-1,'#AJOUT_1','+','#AJOUT_2','+','#AJOUT_3');
    }

    function soustraction() {
    KW_calcForm('SOUST_RESULTAT',100,-1,'#SOUST_1','-','#SOUST_2');
    }

    //-->
    </script>

    Voir un exemple (si installation achevée)


8) MISE EN FORME DES CHAMPS DU FORMULAIRE

8.1) AFFICHAGE DES CHAMPS EN MODE AUTOMATIQUE

    Par défaut, le moyen le plus simple d'afficher les champs qui ont été déclaré est le mode automatique. Les champs sont insérés dans un tableau à 2 colonnes (la colonne de gauche comprend le label, celle de droite le champ lui même.

    Ce mode permet néanmoins de faire varier la positions des champs en largeur :

    $f->frm_Init($readonly,'200px');

    et de faire des sauts de lignes entre les champs :

    $f->frm_SautLignes(2);

     

8.2) AFFICHAGE DES CHAMPS EN MODE MANUEL

    Quand le positionnement automatique ne correspond pas à ce que l'on veut il ya toujours la possibilité de placer les champs manuellement. Dans ce cas la génération du tableau qui reçoit les labels dans la colonne de gauche et les champs dans celle de droite ne se fait pas

    syntaxe :

    $f->frm_Ouvrir(false);

    ATTENTION NE PAS OUBLIER DE PLACER MANUELLEMENT LES BOUTONS DE VALIDATION ET D'ANNULATION

    <?php $f->frm_AfficheBtnValider(); ?>
    <?php $f->frm_AfficheBtnAnnulerQuitter(); ?>

    LA VUE CI-DESSOUS EST CELLE DE L'EDITEUR EN MODE RENDU

8.3) MODIFIER LES LIBELLES DES BOUTONS

    Par défaut les boutons ont les libellés suivants :

    Il est possible de modifier le libellé des boutons suivants par l'usage de la fonction :

    Implicitement : $f->frm_LibBoutons('Valider','Quitter','Rétablir');

    On peut choisir par exemple : $f->frm_LibBoutons('OK','Sortir','Annuler');

    Voir un exemple (si installation achevée)

8.4) PREACTIVER LE BOUTON VALIDER

    Le bouton Valider est inactif jusqu'a ce qu'on rendre dans un champ et quand il y a plus d'un champ dans le formulaire :

    Il est possible cependant de pré-activer le bouton VALIDER

    Déclaration de la fonction : $f->frm_ActiverBtnValider();

    Voir un exemple (si installation achevée)

     

8.5) SAUT DE LIGNES

    Pour réaliser des sauts de lignes entre les objets utiliser la fonction $f->frm_SautLignes()

    Implicitement : $f->frm_SautLignes();

    provoque 1 seul saut de ligne avant l'objet suivant

    $f->frm_SautLignes(2);

    provoque 2 sauts de lignes avant l'objet suivant

    Voir un exemple (si installation achevée)

 


9) CODAGE DE LA RE-ENTRANCE

    Comme décrit dans le schéma, il faut analyser en PHP avant d'envoyer la 1ere balise HTML les codes $_POST pour savoir dans quel état doit se trouver la page.

    9.1) APPEL D'UNE FENETRE EN MODE "AJOUT"

    par convention l'appel d'une page en ajout se fait sans paramètre GET
    ( syntaxe d'appel : nom_page.php )

    Dans ce cas les états que pourra prendre la page seront :

    A0 : 1er appel à la page, on met les champs à blanc

    A1 : on analyse les champs (récupéré en $_POST)

    AQ : la touche "quitter" a été pressée on branche à la page suivant (liste, menu général...) par la fonction
    header("Location: AfficherResultats.php");

    9.2) APPEL D'UNE FENETRE EN MODE "MODIFICATION"

    par convention l'appel d'une page en ajout se fait avec un ou plusieurs paramètres GET
    ( syntaxe d'appel : nom_page.php?id=100 )

    Dans ce cas les états que pourra prendre la page seront :

    M0 : 1er appel à la page, on récupère le paramère $_GET, on lit l'enregistrement correspondant à la valeur de la clef

    M1 : on analyse les champs (récupéré en $_POST)

    MQ : la touche "quitter" a été pressée on branche à la page suivant (liste, menu général...) par la fonction
    header("Location: AfficherResultats.php");

    9.3) APPEL D'UNE FENETRE EN MODE "CONSULTATION"

    par convention l'appel d'une page en ajout se fait avec plusieurs paramètres GET
    ( syntaxe d'appel : nom_page.php?id=100&RO=yes )

    Dans ce cas les états que pourra prendre la page seront :

    L0 : 1er appel à la page, on récupère les paramères $_GET, on lit l'enregistrement correspondant à la valeur de la clef

    L1 : n-ieme appel à la page, on récupère les paramères $_GET, on lit peut dans ce cas

    LQ : la touche "quitter" (c'est la seule affichée dans ce cas) a été pressée on branche à la page suivant (liste, menu général...) par la fonction
    header("Location: AfficherListe.php");

    Pour utiliser un formulaire en consultation c'est facile :

    <?php
    $consultation = isset($_GET['RO']);

    $f->frm_Init($consultation,'200px');
    ...

    ?>


    $f->frm_LibBoutons("Effacer","Sortir","");

    Dans le cas ou on choisit le bouton "Effacer", La page sera ré-entrante avec le statut "L1"



    $f->frm_LibBoutons("","Sortir","");

    La chaine n°=1 doit être une chaine vide

    Dans ce cas, La page sera ré-entrante avec le statut "LQ"

    Voir un exemple (si installation achevée)

    9.4) AIGUILLER VERS LE BON CODE A EXECUTER

    Dans les 3 cas précédants, il est nécessaire de faire un appel à la fonction frm_Aiguiller() (les objets doivent préalablement être déclarés)

    $ret = $f->frm_Aiguiller('NOM_DE_LA_CLEF');
    switch ( $ret ) {

    case "A0" :
    $action = "APPEL A LA FENETRE EN AJOUT n°1";
    break;

    case "A1" :
    $action = "APPEL A LA FENETRE EN AJOUT n°2 et +";
    // controler les variables $_POST
    // si pb faire appel à la fonction "frm_ChampsRecopier()", tous les champs sont recopiés
    // si pas de pb alors :
    // - on sauvegarde des données
    // - on branche header("Location: AfficherListe.php");
    break;

    case "AQ" :
    header("Location: AfficherListe.php");
    break;

    }

    9.5) L'ATTRIBUT "S" POUR "SUBMIT()"

    L'attribut "S" permet en cas de changement de valeur d'un champ de forcer la réentrance du formulaire, il suffit d'analyser sa valeur pour définir de nouveaux champs ou modifier des valeurs. On peut l'utiliser principalement avec des boutons radios ou des listes.

    Exemple d'application : On souhaite par exemple renseigner une liste avec les 36000 communes de France. Le chargement et l'affichage donnerait des temps de réponse catastrophique. On préférera définir une liste des département avec l'attribut "S" et dans la réentrance charger uniquement les communes de ce département après un filtrage sur le département choisi.

    Syntaxe :

    $ret = $f->frm_Aiguiller('NOM_DE_LA_CLEF');
    switch ( $ret ) {

    Voir un exemple (si installation achevée)

    9.6) SAUVEGARDER DES VALEURS DE CHAMPS

    Il est parfois nécessaire de mémoriser des paramètrage environnementaux ou des choix par défaut sans que celà soit nécessaire dans une base de données dans ce cas on choisira :

    - les variables de session si la durée de vie de l'information est limitée au temps ou l'utilisateur est connecté à l'application

    - les cookies pour mémoriser des informations sur plusieurs mois
    exemple : on veut proposer par défaut à un utilisateur le choix du format d'étiquette qu'il utilise tout le temps.

    Syntaxe :

    ... les champs viennent d'être défini

    $ret = $f->frm_Aiguiller('NOM_DE_LA_CLEF');
    switch ( $ret ) {

    case "A0" :
    ...
    $f->frm_ChampInitialiserValeur("ETIQUETTES", $_COOKIE["ETI_ID"] );
    break;

    case "A1" :
    ...
    setcookie("ETI_ID", $_POST['ETIQUETTES'], time()+86400*9999);
    break;

    }

    Explications : la valeur est potionnée

     


10) LE CODAGE DES UPLOAD (TELECHARGEMENTS)

    Php nativement offre des fonctions qui associées à l'objet "sélecteur de fichiers" permettent de télécharger sur le serveur des fichiers locaux.

    TECHNOLOGIE PHP :

    La taille maximum d'un fichier téléchargeable est fixé par plusieurs paramètres :

    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;

    ; Whether to allow HTTP file uploads.
    file_uploads = On

    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    ;upload_tmp_dir =

    ; Maximum allowed size for uploaded files.
    upload_max_filesize = 200M

    ....


    ; Maximum size of POST data that PHP will accept.
    post_max_size = 200M


    <input name="MAX_FILE_SIZE" type="hidden" value="100000000">

    LES FONCTIONS SPECIALISEES DANS L'UPLOAD DE LA CLASSE

    la classe formulaire place automatiquement ce champ si un champ sélecteur est positionné et si la fonction : frm_InitUpload() est appelée avec comme paramètre :

    $f->frm_InitUpload($destination,$taillemaxi,$suffixes)

    • $destination est le chemin physique ou sont copiés les fichiers [OBLIGATOIRE]
    • $taillemaxi est la taille en octets maximums autorisée pour ce formulaire [OPTIONNEL] si non précisé limite = limite du système
    • $suffixe est la liste des suffixes en majuscule séparés par une virgule

    $tabretour = $f->frm_Upload($nomchampfichier,$prefix="");

    • $nomchampfichier est le nom du champ sélecteur [OBLIGATOIRE]
    • $prefix est le préfixe qui sera ajouter au fichier physique pour éviter les doublonnages
    • $tabretour est un hash qui permet de récupérer des caractèristiques physiques du fichiers effectivement écrit

      $tabretour[ 'logicalname'] est le nom logique du fichier avant son éventuel pré-fixage
      $tabretour[ 'physicalname'] est le nom physique du fichier après son éventuel pré-fixage mais sans le chemin d'accès
      $tabretour[ 'physicalfullname'] est le nom physique du fichier qui a été effectivement écrit
      $tabretour[ 'errorlib'] est le libellé en clair de l'erreur
      $tabretour[ 'suffix'] est le suffixe du fichier
      $tabretour[ 'error'] est le code de l'erreur

     

    Dans l'exemple ci dessous les seuls fichiers de type DOC et XLS de moins de 10Mo seront autorisés

    include('classeForms.php');

    $f = New Forms;
    $f->frm_Init(false,'100px');

    $f->frm_InitUpload("D:/TEMP/","10000000","DOC,XLS");
    $f->frm_LibBoutons('Attacher','Quitter','Annuler');

    definition_des_champs();

    $ret = $f->frm_Aiguiller('DOC_ID');

    switch ( $ret ) {

    case "A0" :
    break;

    case "A1" :
    // TEST SI LE FICHIER N'EXISTE PAS DEJA
    $tabretour = $f->frm_Upload('DOC_URL',"");
    if ($tabretour['error']==0) {

    // ici se place le code quand tout est OK
    // - saugegarder dans la base les autres champs
    // faire un branchement automatique par la fonction : header();



    } else {

    $f->frm_ChampEnErreur('DOC_URL',$tabretour['errorlib']);

    }
    // SINON A REAFFICHE LE FORMULAIRE COMPLET
    $f->frm_ChampsRecopier();
    break;

    case "AQ" :
    break;

    }

    L' EXEMPLE EST SUCCEPTIBLE DE NE PAS FONCTIONNER SUR UN SERVEUR INTERNET D'UN FOURNITURE D'ACCES. EN EFFET ON DOIT POUVOIR MODIFIER LES PARAMETRAGES SYSTEMES "PHP" DE LA DESCRIPTION CI DESSUS

    Voir un exemple (si installation achevée)


11) LES SORTIES DIFFEREES

    Il peut être interressant quand on génère des sections d'une page à partir de variables de différer les sorties et placer tout le code généré dans une variable:

    EXEMPLE :

    <?php

    $f = New Forms;

    $f->frm_initbuffer();

    $f->frm_Init($readonly,'200px');
    $f->frm_InitConfirm();
    $f->frm_Objet...

    $f->frm_Ouvrir(); // la sortie n'est pas effective

    $buffer = $f->frm_flushbuffer();

    ?>

    ....

    <h4><span class="titre1 style1">TOUS LES OBJETS DISPONIBLES </span>
    <?php

    print "<h1>$action</h1>";
    print "<hr>";

    // c'est ici que sortira tout le code lié au formulaire (rien avant)
    print $buffer;

    ?>
    </h4>

    Voir un exemple (si installation achevée)

 


 

A) LES EXEMPLES

     

    A.1) Exemples de codes

    sample01_palette.php
    Utilisation des skins
    sample02_protection.php
    Protection du clic droit
    sample03_masques.php
    Utilisation des masques de saisie d'in fichier texte
    sample04_dates.php
    Utilisation des formats date et timestamp dans un champ texte
    sample05_listes.php
    Différentes listes
    sample05_listes_editables.php
    Listes éditables
    sample06_memo_editeur.php
    Champs mémo et editeur de texte
    sample36_memo_editeur_onglet.php
    idem mais dans un onglet
    sample07_coche_radio.php
    Champ radio et coche, activation dynamique de champs
    sample07_coche_graphiques.php
    Champs checkbox modifiés
    sample08_onglets.php
    Utililisation des onglets pour simplifier les formulaires trop denses
    sample09_selecteur.php
    Sélecteur de fichier
    sample11_submit.php
    Gestion dynamique de la réentrance sur un champ
    sample12_champenerreur.php
    Gestion par programmation des champs en erreur
    sample13_sliders.php
    Emploi des Sliders pour choisir graphiquement des nombre entier dans un intervalle donné
    sample14_boutons.php
    Modification du libellé des boutons standards
    sample15_consultation.php
    Gestion du mode consultation d'un formulaire
    sample15_readonly.php
    Gestion du mode lecture seule de certains champ d'un formulaire
    sample16_attributs.php
    Attributs de saisie des champs textes (U,I, L, M)
    sample17_sautlignes.php
    Affichage de saut de ligne entre les champs

     

    sample18_TOUSLESOBJETS.php


    Catalogue de tous les objets à afficher
    sample19_popup.php
    Champ Popup appelant une autre page dans une fenêtre popup placée automatiquement sous le champ
    sample20_separateurs.php
    Champ Entete de séparation de paragraphe, permet comme avec les onglets de gérer un nombre important de champs
    sample21_separateurs_onglets
    idem mais avec des onglets à gérer pour un nombre très important de champs
    sample22_arbres.php
    Gestion d'arbres
    sample23_icones.php
    Selecteur d'icones (s'appuie sur le mécanisme des champs POPUP)
    sample24_icones.php
    Selecteur d'icones dans un onglet
    sample25_confirm.php
    Confirmation d'un ajout ou d'une modification par boite de dialogue
    sample26_upload.php
    La gestion des Uploads
    sample27_scroller.php
    sample27_scroller2.php
    sample28_scroller_coche_radio.php
    Affichage d'une zone de scroll pour que les boutons valider/annuler restent immobiles
    2 modes possibles "automatique ou manuel"
    sample29_timer
    la gestion du champ heure dynamique
    sample30_javascript
    Exécuter un javascript a chaque sortie de champ pour réaliser un calcul par exemple.
    sample31_colorpicker
    Sélecteur de couleur de fond ou de texte(utilise les fonctions popups pour charger le sélecteur)
    sample34_taillepolice.php
    Taille par défaut de la police de caractère
    sample35_bufferedoutput.php
    Bufferisation des sorties
    sample37_sortselect.php
    Liste à trier
    sample38_sortselect_separator.php
    Liste à trier avec séparateurs à insérer

     

    Voir un exemple (si installation achevée)

    A.2) Utilisation des palettes pré-définies