next up previous contents
suivant: Cas particulier des sélections monter: Le Langage PHP précédent: Interaction avec des formulaires   Table des matières

Le type HIDDEN

On peut très bien reproduire l'exemple précédent en utilisant qu'un seul fichier. Ce dernier sera un script PHP contenant 2 fonctions: l'une chargée d'afficher le formulaire et l'autre chargée d'afficher le contenu des variables $nom et $prenom. On utilise alors une variable etat pour savoir si l'on doit:
- afficher le formulaire (première connexion au script, $etat = ""),
- afficher le contenu des variables (formulaire validé, $etat = "validation").
<HTML>
<HEAD><TITLE> Affiche </TITLE></HEAD>
<SCRIPT language="php">
function affiche($n, $p)
{
  print "Votre nom: <B>$n</B><BR>";
  print "Votre pr&eacute;nom: <I>$p</I>";
}
function formulaire()
{
  print "<FORM METHOD=POST ACTION=exemple.php3>\n";
  print "<INPUT NAME=nom> Nom:\n";
  print "<INPUT NAME=prenom> Pr&eacute;nom:\n"; 
  print "<INPUT TYPE=SUBMIT VALUE=Validez>\n";
  print "</FORM>";
}
switch($etat)
{
 case "":
   $etat = "validation";
   formulaire();
   break;
 case "validation":
   affiche($nom, $prenom);
   break;
}
</SCRIPT>
</HTML>
On supposera que ce code correspond au fichier exemple.php3. Lorsque l'on effectue une requête à l'adresse http://xxx/exemple.php3, le script exemple.php3 est exécuté par le serveur. La variable $etat n'ayant jamais été définie, elle a pour valeur la chaine vide, la fonction formulaire() s'exécute. Le serveur renvoie sur l'entrée standard du navigateur le code HTML du formulaire.

L'utilisateur remplit le formulaire et clique sur le bouton de validation ce qui a pour effet de demander (ACTION=exemple.php3), l'exécution du script exemple.php3 par le serveur. Il faut insister sur le fait que exemple.php3 est de nouveau exécuté, ce qui signifie que la variable $etat n'a toujours pas de valeur même si elle a été positionnée à ``validation'' lors de la précédente exécution, il s'agit de deux exécutions bien distinctes. Le résultat sera donc une fois de plus l'afficahe du formulaire au lieu du contenu des variables $nom et $prenom.
Il faut donc trouver un moyen permettant, au moment de la validation du formulaire, de transmettre au script la nouvelle valeur de $etat. On sait que lors d'une validation, toute variable HTML associée à une zone de saisie devient une variable PHP globale pour le script associée à l'attribut ACTION. Il suffit donc de créer dans le formulaire initial une variable HTML nommée etat. C'est dans ce cadre qu'intervient le type HIDDEN, ce dernier permet de définir une zone de formulaire invisible à l'écran. Son but est donc essentiellement de permettre de définir dans un formulaire des variables HTML supplémentaires non reliées à des données saisies par l'utilisateur. La syntaxe générale est:

< INPUT TYPE=HIDDEN NAME=nom_variable VALUE=valeur_variable >

Le code de exemple.php3 est donc le suivant:
<HTML>
<HEAD><TITLE> Affiche </TITLE></HEAD>
<SCRIPT language="php">
function affiche($n, $p)
{
  print "Votre nom: <B>$n</B><BR>";
  print "Votre pr&eacute;nom: <I>$p</I>";
}
function formulaire()
{
  print "<FORM METHOD=POST ACTION=exemple.php3>\n";
  print "<INPUT NAME=nom> Nom:\n";
  print "<INPUT NAME=prenom> Pr&eacute;nom:\n"; 
/*  PASSAGE DE LA VALEUR DE LA VARIABLE ETAT  */
/*                                            */  
  print "<INPUT TYPE=HIDDEN NAME=etat VALUE=validation>\n";
/*                                            */  
  print "<INPUT TYPE=SUBMIT VALUE=Validez>\n";
  print "</FORM>";
}
switch($etat)
{
 case "":
   formulaire();
   break;
 case "validation":
   affiche($nom, $prenom);
   break;
}
</SCRIPT>
</HTML>
  • Questions
    - Que se serait-il passé si la fonction affiche avait été déclarée de la façon suivante:
    function affiche()
    {
      print "Votre nom: <B>$nom</B><BR>";
      print "Votre pr&eacute;nom: <I>$prenom</I>";
    }
    
    - Proposez une solution afin de régler le problème précédent.


    Sous-sections
    next up previous contents
    suivant: Cas particulier des sélections monter: Le Langage PHP précédent: Interaction avec des formulaires   Table des matières
    Pascal VERON 2000-03-20