Accueil > Manip’s > PHP > Leçons PHP > Articulation générale d’une page PHP multi-actions
PHP
Articulation générale d’une page PHP multi-actions
Méthode de programmation
dimanche 5 mars 2006, par
Articulation générale d'une page PHP multi-actions
Contrairement à une page HTML qui ne peut qu'afficher des éléments, la page PHP est un véritable programme exécutable en ligne.
- L'habitude du programmeur PHP est de concentrer toutes les actions commandées par la même page dans le même script afin d'éviter la multiplication et la dispersion des pages sur son site.
- Ce qui revient en terme technique à appeler plusieurs fois la même page, mais avec des arguments différents qui servirons d'aiguilleurs vers les différents modules ou sections de la page, correspondants aux différentes actions PHP.
Voila donc le squelette général en plusieurs sections d'une page PHP réagissant à plusieurs actions
- Par définition il existe d'abord une
action par défaut
qui correspond à la toute première
ouverture
de la page
- C'est une action de présentation, (en général d'un formulaire),
- L'utilisateur remplissant des champs et cliquant sur un bouton pour exécuter le traitement de cette information
- Nous appellerons cette action de présentation l'INITIALISATION symbolisée par la constante _INIT_
- L'exécution du traitement de l'information, correspondant à l'argument "action" du formulaire <FORM action="?">, nous l'appellerons de ce fait ACTION, symbolisée par la constante _ACTION_
Technique de passage de l'argument "Mode d'Action" par un formulaire
Soit un formulaire
- <FORM>
- </FORM>
Il contiendra TOUJOURS au minimum
- Un bouton de SOUMISSION (submit)
- Et un champ caché (hidden) appelé mode dont la valeur servira d'aiguillage au traitement de l'information soumise
- <FORM>
- <input type="hidden" name="mode" value="1">
- <input type="submit" value="Exécution">
- </FORM>
- que la seule action du formulaire sera de s'appeler lui-même (on ne peut pas faire plus simple) la seule différence d'un appel à un autre étant la valeur entière passée par le champ caché MODE, (0,1,2 etc...)
- Et que le mode de passage des paramètres se fera selon la méthode la plus sûre par "Champ Postés" dite "POST"
Dans cet exemple le formulaire se passe à lui même la valeur 1
- <FORM method="POST" action= <?echo$_SERVER['PHP_SELF']?>
>
- <input type="hidden" name="mode" value="1">
- <input type="submit" value="Exécution">
- </FORM>
Dans cet exemple le formulaire passe la valeur 0 :
- <FORM method="POST"
action=<?echo$_SERVER['PHP_SELF']?>>
- <input type="hidden" name="mode" value="0">
- <input type="submit" value="Exécution">
- </FORM>
VOILA MAINTENANT LE SCRIPT TEL QU'IL APPAIRAIT DANS PAGE PHP
- <?PHP
- define("_DEBUG_",FALSE);
- // define("_DEBUG_",TRUE);
- define("_INIT_", 0 );
- define("_ACTION_", 1 );
- $_SELF=$_SERVER['PHP_SELF']; // Nom de la page elle même
- $mode = isset($_POST['mode'])?$_POST['mode'] : _INIT_;
- // =============================================================================
- // SELON LE MODE D ENTREE
- // =============================================================================
- if(_DEBUG_) print "MODE=$mode";
- switch ($mode)
- {
- // 00000000000000000000000000000000000000000000000000000000
- case _INIT_ : // MODE AFFICHAGE
- //
00000000000000000000000000000000000000000000000000000000
- ...
- ICI LE CODE CORRESPONDANT A L'AFFICHAGE DU FORMULAIRE
- ...
- echo '
- <form method="post" action="'.$_SELF.'" >
- <input type ="text" name="texte">
- <input type ="hidden" name="mode" value="1">
- <input type="reset" value="Effacer">
- <input type="submit" value="Valider">
- </form>';
- // ________________________________________________________
- break;
- // 11111111111111111111111111111111111111111111111111111111
- case _ACTION_ : // MODE GESTION
- //
11111111111111111111111111111111111111111111111111111111
- $texte = isset($_POST['texte']) ? $_POST['texte'] : "";
- ...
- ici le code de traitement de l'info
- ...
- // ________________________________________________________
- break;
- }; /* END SWITCH */
Messages
1. Articulation générale d’une page PHP multi-actions, 27 avril 2006, 23:16, par bluegyn
RAPPEL
Le Tableau $_POST
Stockent toutes les variables POSTEES par ton formulaire (en clair les champs du FORM) quand tu cliques sur ENVOYER
Alors que tu n’as pas encore cliqué sur le Dit-Bouton quand le formulaire s’affiche
Tu dois faire une page à double articulation
Une 1ere entrée que j’ai nommé _INIT_
Affiche le Tableau
Un second passage que j’ai nommé _ACTION_
S’occupe des calculs etc...
Pour savoir si je suis en passage 1 ou 2, je rajoute à mon formulaire un champ caché "hidden" que j’ai appelé "mode"
mode est placé dans la variable $mode qui est lue à l’entrée et qui prend la valeur _INIT_ = 0 au lancement et _ACTION_ = 1 lorsque je clique sur le formulaire
Une variable doit être récupérée de cette façon
$mode = isset($_POST[’mode’]) ? $_POST[’mode’] : _INIT_ ;
Ce qui veut dire en Français
Si mode est défini dans les variables postées alors $mode prend la valeur du champ correspondant nommé mode (sans dollar) du formulaire
Si mode n’est pas défini alors je lui donne une valeur par défaut, Ici _INIT_ mais ça peut être n’importe quoi
De cette façon ma variable est TOUJOURS DEFINIE (soit par le programme = "affectation", soit par moi ="défaut")
Tu remarques que j’ai mi un constante bien utile en entête qui est
define("_DEBUG_",TRUE) ;
Ce qui te permet de tracer tes variables en mode débogage
Quand ton programme est au point il suffit d’écrire
define("_DEBUG_",FALSE) ;
Pour nettoyer tes pages
Quand a Date, il faut lui fournir des arguments de formatage pour qu’elle ressorte une date valide
Pour obtenir le 26-4-2006 il suffit d’écrire $date = date("d-m-Y")
Enfin
L’instruction PRINT à la seule condition d’encadrer la ligne par les Double Guillemets " "
Permet de placer directement des variables dans la ligne, ce qui simplifie considérablement l’écriture
Au lieu d’écrire
print ’La variable A vaut ’ . $a . ’ et la variable B vaut ’ . $b . ’.’ ;
Je peux écrire
print "La variable A vaut $a et la variable B vaut $b ." ;
1. Articulation générale d’une page PHP multi-actions, 27 avril 2006, 23:17, par bluegyn
Ce qui est complexe c’est que la même page sert en fait à faire 2 programmes totalement distincts
Dans un premier temps elle affiche le formulaire de saisie
Puis dans un second temps elle traite les données du formulaire quand tu cliques sur envoyer
Cet artifice est obtenu par le fait que la page s’appelle elle-même
Ce qui est résumé dans cette ligne
=> FORM ACTION=$_SELF METHOD=POST
Ce qui veut dire "Poster les données saisies dans la page elle-même"
Mais ce que tu n’avais pas compris c’est qu’elle n’appelle pas les mêmes parties de codes avant le clic et après.
En fait tu pourrais très bien faire (pour plus de clarté) 2 pages distinctes
1- une page d’affichage
afficher.php
Qui appelle une seconde page quand tu cliques sur envoyer
Par le truchement de cette ligne
=> FORM ACTION=traiter.php METHOD=POST
2- traiter.php
Etant simplement chargée de récupérer les données transmises dans le tableau dit "super-global" $_POST
$nom = $_POST[ ’nom’ ] ;
etc...
Ici les 2 pages sont donc écrites l’une dans l’autre, mais la seconde ne peut être exécutée que si la première est argumentée
et l’étanchéité entre les 2 est assurée par l’instruction
SWITCH qui sert d’interrupteur de type va-et-vient (d’abord la première, puis la seconde)
switch ( $variable )
case 0 : afficher ;
break ;
case 1 : traiter ;
break ;
;
Ce qui veut dire en Français
Analyser la ( variable_mode )
DEBUT DE L_ANALYSE
Si la valeur de $mode est 0 : alors j’affiche ;
Et j’arrête ici ;
Si la valeur de $mode est 1 : alors je traite ;
Et j’arrête ici ;
FIN DE L_ANALYSE
On peut noter ici la différence pour la culture entre les METHOD(es) POST et GET
POST est une METHOD
discrète car elle cache les données transmises (on ne voit rien passer dans l’URL)
non limitée en nombre et en taille de variables
GET est la METHOD par défaut si METHOD n’est pas précisé
GET passe les variables d’une page à une autre en les écrivant dans l’URL de cette façon
traiter.php ?nom=Dupont&prenom=Jean
Elle est indiscrète car tout le monde peut lire ce qui passe dans l’URL
Elle est limitée à la capacité maxi de l’URL c’est a dire 255 caractères
Si les variables "postées" se récupèrent dans le tableau $_POST
Les variables "getés" se récupèrent tout simplement dans le tableau $_GET
$nom = $_GET[ ’nom’ ] ;