AUTEUR : FRANCK OBERLECHNER, Ingénieur Système et Réseaux
SOMMAIRE
1. Préambule
3. Déclaration de la page appelante
4. Déclaration de la page appelée
5. La sécurité
6. Le débuggage
A. LES EXEMPLES
1) PREAMBULE
La classe ClasseLogonMini.php permet de gérer facilement et par objet des champs d'un formulaire ou d'un tableau. La classe implémente un dialogue asynchrone de type AJAX (REQUETE : HttpRequest et REPONSE : fichier XML) entre une page appelante et une page appelée, on a besoin pour chaque formulaire de 2 pages :
La page appelante La Page appelée
- définitions des objets (attributs)
- affiche les objets (plusieurs instance d'un même objet sont possibles)
- a chaque action sur un objet, on appele la page "asynchrone"
gère 3 types d'événements :
. INIT : initalisation de tous les champs du formulaire
. FIELD : gestion individuelle de chaque champ
. OK : validation de tout le formulaire
il est possible en retour et en fonction des événements déclencheurs de lancer des actions sur un ou plusieurs objets du formulaire :
- activer/désactiver un objet,
- changer sa valeur,
- restaurer sa valeur d'origine ,
-changer les options d'une listeLe point faible d'une telle architecture est la sécurité : on doit empêcher toute autre page que la page appelante de faire des requêtes HttpRequest, sous peine de se faire pirater les données. Un mécanisme de sécurité à plusieurs niveaux a été mis en place nativement.
(voir chapitre SECURITE)
Le débuggage AJAX aïe aïe aïe ! Non avec les fonctions appropriées de débuggage
(voir chapitre DEBUGGAGE)
2) 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 classeLogon.php et le répertoire classeLogon (ce répertoire contient la documentation et les exemples)
On obtient l'arborescence :
.../Répertoire_Include
_classePath.php
classeFormsMini.php
classeFormsMini<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/');ATTENTION pour que toutes les pages de votre site fonctionnent définir de préférence un chemin absolu ( commencant par un / et donnant le chemin complet depuis la racine du site )
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
3) DECLARATION D'UNE PAGE APPELANTE
Contrairement au classeForms, cette page permet de définir les objets, mais ce n'est pas à son niveau que les accès à la base sont définit.
Elle a pour objet de :
- définir les objets du formulaire
- gérer les événements
4) DECLARATION D'UNE PAGE APPELEE
Cette page reçoit les événements et les transforme en action :
- action immédiate sur la base de données : modification d'un champ d'un enregistrement ou de tous ses champs à la fois.
- rétro-action sur l'état, la valeurs des autres champs, éventuellement les options des listes, graces aux primitives suivantes:
5) LA SECURITE
La faille de sécurité du système asynchrone AJAX, c'est l'acceptation par la page appelée de variables POST en provenance de n'importe quelle page qui viendrait la tromper et lui faire faire n'importe quoi.
La sécurité native offerte par classeFormsMini est à 2 niveaux :
- un dialogue de variables POST dont le nom est aléatoire et dynamique.
- l'acceptation par défaut de n'importe quelle page d'origine pourvu qu'elle soit dans le même répertoire que la page appelée.
6) LES ORDRES RETRO-ACTIFS
Ce sont les commandes télécommandés par la page appelée qui agit sur des objets de la page appelante
frm_field_enable() , frm_field_disable() pour activer ou désactiver un autre champ.
frm_field_show() , frm_field_hide() pour rendre visible ou nom un champ dynamiquement
frm_field_changevalue('NOM_DU_CHAMP','nouvelle valeur'), pour changer la valeur d'un champ
frm_field_changehref('ICO_HREF','mini_dump_get.php?TOTO=YES') , pour changer l'url d'un champ icone dynamiquement
frm_field_restorevalue('NOM_DU_CHAMP'), pour remettre la valeur d'origine du champ
frm_field_changeoptions(), pour changer les options d'une liste
frm_field_focus('NOM_DU_CHAMP'), pour les champs textes, prend le focus sur un autre objet
frm_add_message('message affiché dans une boite d'alerte'), pour invoquer une boite d'alerte javascript au retour de l'appel asynchrone
frm_add_warning($chaine_de_warning), affiché en alerte si le mode debug n'est pas actif, sinon dans la trace
frm_add_comment($chaine_de_commentaire), affiché uniquement dans la trace en mode debug
7) LE DEBUGGAGE
La grosse difficulté dans la manipulation AJAX réside dans le débuggage des erreurs de programmation.
Cette action est facilité de plusieurs manières
- Dans la dans la page appelante, un appel à la fonction $f->frm_Debug(); permet de controler le dialogue page appelante / page appelée.
- Dans la page appelée, un appel à la fonction $f->frm_add_warning() qui permet de forcer l'affichage de la page XML en retour quelque soit le statut du débuggage dans le page appelante,
On peut retourner par exemple une requete SQL pour vérifier son exactitude- Dans la page appelée, un appel à la fonction $f->frm_add_comment() qui permet d'afficher une chaine dans la page en retour uniquement si le statut du débuggage est actif.
Dans tous les exemples le picto est en fait un bouton actif, qui permet de changer dynamiquement le statut du débuggage et de le mémoriser dans un COOKIE disponible pour tous les exemples
Par défaut, les événements sont matérialisés par une alerte "popup" ce qui peut s'avérer rapidement pénible si le nombre d'événements est élevé.
un plaçant à l'endroit désiré à l'écran un appel à la fonction
print $f->frm_AfficherEvenements(); on affiche 2 zones de textes et un bouton d'effacement, qui journalise les événements en haut (le plus récent en haut) et affiche le fichier XML en retour.
Tout est invisible si le debuggage est inactif.
A) LES EXEMPLES
mini01_mono.php Formulaire simple mini01_mono2.php Formulaire simple avec boutons de validation mini02_change_listes.php Formulaire simple avec boutons de validation et listes dynamiques mini02_change_listes_cachees.php Listes dynamiques qui apparaissent et disparaissent dynamiquement mini06_invisibilite.php Affichage ou non de champs mini07_champs_desordre.php Définition et Affichage dans un ordre différent mini04_36000_choix.php Choix avec listes en cascade pour choisir une commune mini05_champs_textes.php Champs textes mini02_multi.php Formulaire tableau mini02_multi2.php Formulaire tableau avec modification de DIV mini02_multi3.php Formulaire tableau avec modification de DIV qui est inclus dans une fenĂȘtre POPUP mini10_base_reelle_comiques Formulaire tableau sur base réelle, les données sont enregistrées dans la base,
l'attribut confirm permet de poser une question avant de faire un appel à la pagemini12_urls Icone avec URL qui s'active ou non en fonction de l'Ă©tat "disabled" mini13_urls_en_tableau Icone en tableau avec URL variable et modifiables mini14_tableau_de_nombres Tableau de nombre avec masques