Sommaire

Transcription

Sommaire
Techniques à Objets et Internet
Le Web et sa programmation
Jean-François Perrot
Université Pierre et Marie Curie (Paris 6)
Cours n° 2
Scripts CGI et formulaires HTML
Sommaire
Formulaires et scripts CGI : 3 - 14
Éléments de formulaire : 15 - 34
les différentes sortes de input : 16 - 29
les select : 30 - 32
les textarea : 33 - 34
Cours n° 2
TOI-Web 2004
J-F.Perrot
2
1
Notion de formulaire (form)
• Une des utilisation majeures du Web est d'échanger des
informations structurées : en effet l'interprétation automatique d'un
texte libre n'est pas pour demain, et aujourd'hui comme hier la
machine s'appuie sur la structure des informations (leur syntaxe)
pour leur donner un sens (une sémantique).
• Une page Web offre un cadre excellent pour recevoir et afficher
une information. Pour l'opération inverse d'envoi d'une information
la question se pose d'abord de sa saisie.
La notion de formulaire répond à cette question.
• La question se pose ensuite de son interprétation : chez le client
ou chez le serveur ?
– initialement, les formulaires ont été conçus en vue d'une
interprétation par le serveur (scripts CGI);
– nous verrons avec JavaScript le moyen d'une interprétation par
le client.
Cours n° 2
TOI-Web 2004
J-F.Perrot
3
Structure d'un formulaire
Un formulaire HTML est composé d'une suite de champs placés
sous une balise <form> ... </form>
Chacun de ces champs porte un nom et
permet de saisir une donnée sous
forme de chaîne de caractères : la
valeur du champ.
L'information saisie par le formulaire est
constituée de la collection des couples
(nom, valeur) provenant des différents
champs.
Les modalités de la saisie peuvent être
variées selon la nature des champs et
selon la mise en page.
Cours n° 2
TOI-Web 2004
J-F.Perrot
Exemple :
4
2
Exemple
de formulaire
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title> Essai de formulaire </title>
</head>
<body>
<p>Debut</p>
<form action="http://webia.lip6.fr/~jfp/php/querycgi.php">
<p> <strong>Nom :</strong> <input type="text" name="leNom" /> </p>
<p> <strong>Pr&eacute;nom :</strong> <input type="text" name="lePrenom" /> </p>
<p> <strong>Sexe :</strong> <br />
<input type="radio" name="leSexe" value="M" /> M<br /> <!--deux boutons "radio"-->
<input type="radio" name="leSexe" value="F" /> F<br /> <!--mais un seul champ "leSexe"-->
</p>
<p> <strong>&Acirc;ge : </strong>
<input type="text" name="Age" />
</p>
<p> <strong>Activit&eacute;s favorites :</strong> <br />
<input type="checkbox" name="laMusique"
value="Oui" checked="checked" /> Musique <br />
<input type="checkbox" name="leSport"
value="Oui" /> Sport <br />
</p>
<p> <input type="submit" value="Envoi" /> <br /> </p>
</form>
<p>Fin</p>
</body>
</html>
Cours n° 2
TOI-Web 2004
J-F.Perrot
5
Commentaire sur l'exemple
• Ne pas confondre
– les noms des champs (ici, leNom, lePrenom, etc.)
qui sont invisibles à l'utilisateur, et
– les désignations qu'ils portent dans la page,
qui sont purement cosmétiques.
– le formulaire "nu" est logiquement équivalent.
• Noter qu'il y a un seul champ nommé leSexe, les deux
"boutons radio" ne servant qu'à imposer un choix exclusif
entre un certain nombre (ici, 2) de valeurs possibles.
• En revanche, il y a bien deux champs différents laMusique
et leSport.
Cours n° 2
TOI-Web 2004
J-F.Perrot
6
3
Fonctionnement normal du formulaire
• Le formulaire une fois rempli, (peut-être
pas complètement...) sa mise en œuvre
est décrétée par clic sur le bouton
"Envoi".
• L'information qu'il contient est alors
– codée en une seule chaîne de
caractères de "format URL"
(encodage par défaut
application/x-www-form-urlencoded )
– envoyée sous cette forme au serveur
• Exemple : la chaîne codant le contenu du formulaire ci-dessus
leNom=Du+Nabla&lePrenom=Pierre+Andr%E9&leSexe=M&Age=45+ans&laMusique=Oui
Noter le traitement des blancs (remplacés par "+") et du "é" de "André".
Cours n° 2
TOI-Web 2004
J-F.Perrot
7
Envoi au serveur
• Pour que le formulaire puisse fonctionner normalement la balise
<form...> doit porter deux attributs supplémentaires indiquant
– l'un : l'URL du script CGI devant effectuer le traitement (sur le
serveur)
– l'autre : la manière dont le serveur communique la chaîne codée
audit script CGI.
• Le premier est nommé action, s'il est absent il prend comme
valeur par défaut l'URL de la page elle-même.
• Le second est appelé method, et peut prendre deux valeurs GET
(valeur par défaut) ou POST.
Dans le deux cas, la première tâche du script est de décoder la
chaîne pour récupérer le système des couples (nom, valeur) et en
faire ce que bon lui semble...
Cours n° 2
TOI-Web 2004
J-F.Perrot
8
4
Exemple de réponse du serveur
Avec le même formulaire, en renseignant le champ action
:
<form action="http://localhost/~jfp/cgi-bin/query.cgi">
on obtient comme réponse :
Cours n° 2
TOI-Web 2004
J-F.Perrot
9
Rappel sur la structure d'une URL
pour le protocole http
• Une URL contient deux parties
– celle qui désigne le fichier à activer par le serveur (à envoyer au
client si c'est un texte html, ou à exécuter si c'est un script cgi)
http://host:port/path
souvent employée seule avec un navigateur...
– celle qui désigne les arguments de l'action, de la forme
?nom=valeur&nom=valeur&...nom=valeur
appelée query, et que le serveur loge automatiquement
dans sa variable QUERY_STRING
• Un formulaire n'est pas autre chose qu'un éditeur de queries, qui permet
de les écrire commodément, et en garantissant un encodage correct.
Cours n° 2
TOI-Web 2004
J-F.Perrot
10
5
Exemple
Le formulaire précédent
(avec la méhode GET)
ne sert qu'à synthétiser l'URL
(sur une seule ligne, sans blancs !!!)
"http://localhost/~jfp/cgi-bin/deust/query.cgi
?leNom=Du+Nabla&lePrenom=Pierre+Andr%E9
&leSexe=M&Age=45+ans&laMusique=Oui"
Cours n° 2
TOI-Web 2004
J-F.Perrot
11
L'environnement du serveur
• Le serveur gère tout un environnement au sein duquel va
s'exécuter le script CGI.
Ledit script va donc devoir interroger son environnement par
des appels au système (en C, par la fonction getenv).
• Par exemple, la valeur de l'attribut METHOD (dans le formulaire)
est connue dans cet environnement par la variable
REQUEST_METHOD.
On aura donc
– soit getenv("REQUEST_METHOD") <--> "GET"
– soit getenv("REQUEST_METHOD") <--> "POST"
• Enfin, pour être convenablement activé par le serveur, il faut
que le script CGI, en tant que fichier exécutable, soit placé dans
un répertoire appelé ... /cgi-bin (cf. exemple précédent).
Cours n° 2
TOI-Web 2004
J-F.Perrot
12
6
Modalités de transmission
de la chaîne codée
• Pour method=GET (valeur par défaut)
– la chaîne codée se trouve comme valeur de la variable
d'environnement QUERY_STRING
– elle est envoyée au serveur comme complément à l'URL
action : l'appel au serveur prend alors la forme d'une URL,
qui peut être réactivée, ou enregistrée comme signet
– sa longueur est limitée à 200 caractères...
• Pour method=POST
– la chaîne codée est lue par le script sur son entrée standard
(stdin), sans limitation de longueur
– sa longueur se trouve comme valeur de la variable
d'environnement CONTENT_LENGTH
– l'appel au serveur ne mentionne que l'URL action
Cours n° 2
TOI-Web 2004
J-F.Perrot
13
Note sur les scripts CGI
• Un script CGI est un programme critique :
– il est normalement activé depuis une machine distante, ce qui
pose évidemment de graves problèmes de sécurité ;
– il peut être activé concurremment depuis plusieurs clients, ce
qui pose des problèmes de partage de ressources.
• Il peut être écrit en n'importe quel langage offrant l'accès à
l'environnement du serveur (le modèle classique distribué par
NCSA est écrit en C).
• La rédaction de scripts CGI se fait plus souvent au moyen de
PHP (ou de Perl), qui rend les choses beaucoup plus faciles
qu'en C !
Cours n° 2
TOI-Web 2004
J-F.Perrot
14
7
Les trois grande catégories
d'éléments de formulaires
Les éléments de formulaire se répartissent en trois catégories :
• les input qui peuvent prendre des formes ("types") multiples ;
<input type="..." name="nnn"... /> (éléments XML vides)
• les select qui permettent de choisir dans une liste d'options ;
<select name="nnn">
<option value="aaa" />1 <option value="bbb" />2 ...
</select>
• les textarea qui autorisent l'utilisateur à fournir un texte de plusieurs lignes.
<textarea name="nnn" rows=rr cols=cc>
... texte par défaut ...
</textarea >
Cours n° 2
TOI-Web 2004
J-F.Perrot
15
Les différentes espèces ("types")
d'éléments input
• Les champs-texte (text fields) type="text"
et leur variante les mots de passe type="password"
• Les "boutons" (buttons) type="button"
et leurs deux sous-espèces particulières
– les réinitialiseurs (reset) type="reset"
– les envoyeurs (submit) type="submit"
• Les "boutons radio" (radio buttons) type="radio"
• Les cases à cocher (checkboxes) type="checkbox"
• Les champs cachés (hidden) type="hidden"
Cours n° 2
TOI-Web 2004
J-F.Perrot
16
8
<input type="text"... />
alias "champ-texte" ou text field
• Propriétés (chaînes) définies comme des attributs de la balise :
– name fixée dans la balise <input...name="leNom"... />
– defaultValue fixée dans la balise
<input...value="laValeurInitiale"... />
– value modifiable par affectation !
• Comportement :
– présente un champ éditable où l'utilisateur écrit la valeur value
(chaîne de caractères) qui sera transmise au serveur sous le nom valeur
de l'attribut id.
Cours n° 2
TOI-Web 2004
J-F.Perrot
17
<input type="password"... />
alias "mot de passe" ou password
• Propriétés : comme pour type = "text"
• Comportement :
– au lieu d'afficher la chaîne tapée par l'utilisateur, chaque
caractère est remplacé par une étoile (ou par tout autre
caractère anonyme).
Cours n° 2
TOI-Web 2004
J-F.Perrot
18
9
<input type="button"... />
alias "bouton" ou push button
• Instruments qui ne servent qu'à déclencher des actions :
voir JavaScript !
• Propriétés :
– name (chaîne) fixée dans la balise
<input...name="leNom"... />
– value (chaîne) fixée dans la balise (apparaît sur le bouton)
<input...value="uneChaine"... />
Cours n° 2
TOI-Web 2004
J-F.Perrot
19
<input type="reset"... />
alias "bouton reset"
• Un bouton reset a en principe pour fonction de remettre
l'ensemble du formulaire dans son état initial.
• Il a les mêmes propriétés et fonctionnalités qu'un push button
ordinaire : c'est un bouton avec un handler onClick par défaut
qui réinitialise le formulaire.
• Il est donc normalement unique dans le formulaire.
Cours n° 2
TOI-Web 2004
J-F.Perrot
20
10
<input type="submit"... />
alias "bouton submit"
• Un bouton submit a en principe pour fonction d'envoyer le
contenu courant du formulaire au script CGI chargé de son
exploitation.
• Il a les mêmes propriétés et fonctionnalités qu'un push button
ordinaire : c'est un bouton avec un handler onClick par défaut
qui envoie le contenu du formulaire.
• Il est donc normalement unique dans le formulaire.
Cours n° 2
TOI-Web 2004
J-F.Perrot
21
<input type="radio"... />
alias "bouton-radio" ou radio button
• Les "boutons-radio" vont par groupes portant le même nom mais
des valeurs différentes. Chaque groupe correspond à un champ
unique : les différents boutons servent à sélectionner une et une
seule des valeurs proposées, qui est alors la valeur du champ.
• Par exemple : pour un champ nommé "couleur", on peut proposer
un choix exclusif entre les valeurs rouge, orangé, jaune, vert, bleu,
indigo et violet, par un jeu de 7 boutons radio.
• Il faut donc distinguer les propriétés et méthodes relatifs à chaque
bouton de celles qui visent le groupe tout entier.
Cours n° 2
TOI-Web 2004
J-F.Perrot
22
11
radio button suite
•
Le groupe se matérialise par un tableau de boutons, qui porte le nom
(id) commun à tous ses membres.
Le nombre de boutons est donc accessible par l'attribut length du
tableau en question
• Chaque bouton radio a comme
– Propriétés
• defaultChecked (booléen) fixée dans la balise par la présence ou
l'absence de l'attribut checked="checked"
• checked (booléen) modifiable par affectation
• value (chaîne) fixée dans la balise
<input...value="uneChaine"... />
– Comportement
Fixe la valeur attribuée au nom en choisissant celle du bouton
sélectionné.
Cours n° 2
TOI-Web 2004
J-F.Perrot
23
Essai avec boutons radio : les couleurs
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>EssaiRadio</title>
</head>
<body> <p>Debut</p>
<form action="http://webia.lip6.fr/~jfp/php/querycgi.php">
<p> <input type= "radio" name="Couleur" value="#FF0000" /> Rouge <br />
<input type= "radio" name="Couleur" value="#FF8000" />
Orang&eacute;<br />
<input type= "radio" name="Couleur" value="#FFFF00" /> Jaune<br />
<input type= "radio" name="Couleur" value="#00FF00" /> Vert<br />
<input type= "radio" name="Couleur" value="#0000FF" /> Bleu<br />
<input type= "radio" name="Couleur" value="#000080" /> Indigo<br />
<input type= "radio" name="Couleur" value="#FF00FF" /> Violet
</p>
</form>
<p>Fin</p>
</body>
</html>
Cours n° 2
TOI-Web 2004
J-F.Perrot
24
12
Essai avec boutons radio : l'affichage
Cours n° 2
TOI-Web 2004
J-F.Perrot
25
<input type="checkbox"... />
alias "case à cocher" ou checkbox
• Propriétés :
– id (chaîne) fixée dans la balise
<input...name="leNom"...>
– defaultChecked (booléen) fixée dans la balise par la présence
ou l'absence de checked="checked"
– checked (booléen) modifiable par Click
– value (chaîne) fixée dans la balise
<input...value="uneChaine"...>
Cours n° 2
TOI-Web 2004
J-F.Perrot
26
13
Emploi des cases à cocher
• Les champs checkbox portent une double information
– leur valeur (chaîne), qui est transmise (au script CGI) si la
propriété checked est vraie au moment de l'envoi ; cette
valeur est fixée dans le texte HTML ;
– l'indicateur (booléen) checked, modifiable par l'utilisateur :
événement Click et utilisable pour toute sorte de tests.
• Voici un exemple utilisant l'indicateur checked et où les
propriétés valeur ne jouent aucun rôle.
Cours n° 2
TOI-Web 2004
J-F.Perrot
27
Essai avec checkbox :
le formulaire
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>EssaiCheck</title>
</head>
<body> <p>Debut</p>
<form action=
"http://webia.lip6.fr/~jfp/php/querycgi.php">
<p> <input type= "checkbox"
name="Red" />Rouge <br />
<input type= "checkbox"
name="Green" />Vert <br />
<input type= "checkbox"
name="Blue" />Bleu
</p><p>
Quand c'est fini cliquez ...
<input type= "submit" value="ici" />
</p>
</form>
<p>Fin</p> </body> </html>
Cours n° 2
TOI-Web 2004
J-F.Perrot
28
14
<input type="hidden"... />
alias "champ caché" ou hidden
• Comme son nom l'indique, un champ caché n'est pas exhibé sur
la page. À quoi peut-il servir ?
– À contenir une information de service que l'utilisateur n'a pas
à connaître (p.ex. une adresse sur le serveur)
– À contenir une valeur intermédiaire lors d'un calcul.
– Surtout, à réaliser un "état" permettant une suite d'échanges
avec le serveur (notion de session).
• Il n'a qu'une propriété (en plus de son nom) value, qui est une
chaîne de caractères, aucun événement, aucune méthode.
Cours n° 2
TOI-Web 2004
J-F.Perrot
29
Élément <select...>
• Un élément <select...> présente une liste (en représentation
interne, un tableau) d'options.
• Chaque option porte une étiquette qui l'identifie, et les propriétés
fixées dans la balise HTML value (chaîne) et
defaultselected (booléen, indiqué par la présence ou non de
l'attribut selected="selected")
• La liste elle-même possède une propriété selectedIndex qui
permet d'accéder à l'option choisie.
Cours n° 2
TOI-Web 2004
J-F.Perrot
30
15
Essai avec <select...>
<form action="http://webia.lip6.fr/~jfp/php/querycgi.php">
<p> <select name="Couleur">
<option value="FF0000"> Rouge </option>
<option value="#FF8000">Orang&eacute; </option>
<option value="#FFFF00"> Jaune </option>
<option value="#00FF00"> Vert </option>
<option value="#0000FF" selected="selected"> Bleu
</option>
<option value="#000080"> Indigo </option>
<option value="#FF00FF"> Violet </option>
</select>
</p>
</form>
Cours n° 2
TOI-Web 2004
J-F.Perrot
31
Essai avec <select...>
(démo)
Cours n° 2
TOI-Web 2004
J-F.Perrot
32
16
Élément <textarea...>
Ne diffère du champ-texte que
par la possibilité de gérer
plusieurs lignes.
Mêmes propriétés, mêmes
fonctionnalités.
Cours n° 2
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Essaitextarea</title>
</head>
<body>
<form>
<p> Tapez votre texte ici :
<textarea name="Entree"
rows="5" cols="20">
Ceci est un
exemple
</textarea>
</p>
<p> Cliquez ...
<input type= "submit" value="ici" />
</p> </form>
</body></html>
TOI-Web 2004
J-F.Perrot
33
Essai avec <textarea...>
Cours n° 2
TOI-Web 2004
J-F.Perrot
34
17

Documents pareils