====== Activité HTML N° 3 les formulaires ======
===== Présentation =====
Dans une page HTML, les **formulaires** permettent de **saisir** des données :
* l'utilisateur **saisit** des données,
* ensuite l'utilisateur **valide** sa saisie et **soumet** le formulaire c'est à dire demande l'envoi des informations saisies au serveur Web,
* le serveur Web **reçoit** les donnés, les traite et **renvoie** ensuite la **réponse**.
Dans ce **mode classique de fonctionnement** des applications Web :
* c'est donc l'utilisateur, le **client**, qui **sollicite** de **temps en temps** le serveur en envoyant des requêtes avec des données ;
* le serveur **attend** uniquement les requêtes de plusieurs clients pour y **apporter** une réponse.
Pour le projet de voiture, nous allons **procéder différemment** en utilisant un **Websocket** qui permet :
* à **l'utilisateur** **d'envoyer** des données, des requêtes, au serveur pour **commander** par exemples les **moteurs** ;
* mais au **serveur** de **prendre l'initiative d'envoyer** des données à l'utilisateur comme par exemple les **informations des capteurs** de la voiture.
* il s'agit d'une **communication bidirectionnelle** qui peut être **simultanée**.
Pour cela, il sera **nécessaire d'utiliser le langage Javascript** dans la page HTML pour permettre au navigateur de **dialoguer** avec le serveur dans les **deux sens** : **envoi** de données au serveur et **réception** de données du serveur.
===== Créer un formulaire dans une page HTML=====
Les formulaires sont insérés avec le couple de balise principal
.
* **Complète** le contenu du **fichier index.html** du **site Web virtuel ISN** pour ajouter le formulaire suivant :
Commande de la voiture
* connecte-toi au site ISN à l'adresse http://10.3.141.1/ et visualise le résultat de ta page.
La balise **form** utilise les attributs **method** et **action** pour préciser quelle page du serveur doit être **activée** afin de traiter les données envoyées. Mais dans le cadre de la mise en oeuvre d'un **Websocket** géré par javascipt, ces attributs **ne seront pas utilisés**.
===== Les zones de saisie basiques =====
La balise **** permet de **saisir** des information en précisant :
* le **type de données** : texte (**text**), mot de passe (**password**), e-mail (**email**), URL (**url**), numéro de téléphone (**tel**), nombre (**number**), curseur (**range**), couleur (**color**), cases à cocher (**checkbox**) , bouton radio (**radio**), etc.
* le **nom** de la balise : name="nom"
* son **identifiant** : id="nomidentifiant", ce qui sera très important pour interagir avec javascript.
Le champ de **type nombre** (number) peut être personnalisé avec les attributs suivants :
* **min**: valeur minimale autorisée.
* **max**: valeur maximale autorisée.
* **step**: le **pas** d'incrémentation.
Une **étiquette** est nécessaire pour indiquer la **signification** du champ de saisie. C'est le rôle du couple de balises ****. L'attribut **for** de cette balise permet de faire le lien avec l'ID du champ input concerné.
* **Complète** le contenu du **fichier index.html** pour ajouter dans le formulaire les champs de saisie de la vitesse des moteur :
Commande de la voiture
L'attribut **value** permet de définir une valeur par défaut.
===== Les éléments d'options =====
==== Les cases à cocher ====
Les cases à cocher permettent de faire **un ou plusieurs choix** parmi une liste de possibilités.
* **Complète** le formulaire pour ajouter une liste de choix des flèches à activer :
Cochez les flèches à activer :
==== Les zones d'options (boutons radio)====
Les zones d'options vous permettent de faire un **choix unique** parmi une liste de possibilités. Pour cela :
* Elles doivent être **organisées en groupes**,
* posséder le **même nom** (name),
* chaque option doit avoir une valeur (value) différente.
* **Complète** le formulaire pour ajouter induquer si le moteur est configuré pour avancer ou pour reculer :
Choisir le sens de fonctionnement du moteur :
L'attribut **checked** permet de définir le bouton radio comme coché par défaut.
===== Les boutons =====
Les boutons sont un type particulier de zone de saisie car il sont cliquables. Leur type peut être :
* **submit** pour soumettre traditionnellement un formulaire,
* **reset** pour reinitiliser le contenu du formulaire,
* **button** pour le rendre cliquableet que vous allez utiliser pour le projet de voiture.
* **image** pour utiliser une image cliquable en précisant dans l'attribut **src** l'URL de l'image
L'attribut **value** permet de mettre un libellé sur le bouton.
* **Complète** le formulaire pour ajouter un bouton **Start** et un bouton **Stop** :
===== Regrouper des groupes de champs =====
Pour plus de lisibilité et davantage d'organisation, il est utile de regrouper ensemble des champs par fonctionnalités en utilisant les balises