BlueGEEK Journal

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 bluegyn_spip

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>
Nous décidons par définition encore (puisque tous les codes sont sur la même page, )
  • 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>
=> $_SERVER['PHP_SELF'] définissant en PHP4 le nom de la page elle même.

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 */

Explications de code

... a suivre

Messages

  • 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 ." ;

    • 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’ ] ;