Formulaires HTML
Les formulaires permettent aux utilisateurs d'interagir avec votre site : contact, inscription, recherche, commentaires... Apprenez à créer des formulaires efficaces !
Objectifs du cours
- Comprendre le rôle des formulaires HTML
- Maîtriser la balise <form> et ses attributs
- Utiliser les différents types de champs <input>
- Créer des formulaires de contact, inscription, recherche
- Comprendre la différence entre GET et POST
Erreurs courantes à éviter
- Oublier l'attribut name sur les champs (données non envoyées)
- Ne pas utiliser de <label> pour l'accessibilité
- Confondre type='submit' et type='button'
- Ne pas valider les données côté serveur (validation HTML seule insuffisante)
**Définition**
Un **formulaire HTML** est un ensemble de champs qui permettent à l'utilisateur de **saisir des données** et de les **envoyer** au serveur.
**Rôle des formulaires** :
📝 **Collecte de données** : • Informations de contact • Inscription / Connexion • Commentaires et avis • Réservations • Paiements
🔍 **Interaction** : • Barre de recherche • Filtres de produits • Sondages et votes • Upload de fichiers
**Exemples courants** :
🔐 **Formulaire de connexion** : • Email / Nom d'utilisateur • Mot de passe • Bouton "Se connecter"
📧 **Formulaire de contact** : • Nom • Email • Message • Bouton "Envoyer"
🛒 **Formulaire de commande** : • Adresse de livraison • Mode de paiement • Bouton "Valider la commande"
**Fonctionnement** :
1. **Utilisateur** remplit le formulaire 2. **Utilisateur** clique sur "Envoyer" 3. **Navigateur** envoie les données au serveur 4. **Serveur** traite les données (enregistrement BDD, envoi email, etc.) 5. **Serveur** renvoie une réponse (confirmation, erreur, etc.)
**Technologies impliquées** :
• **HTML** : structure du formulaire • **CSS** : style du formulaire • **JavaScript** : validation côté client (optionnel) • **Backend** (PHP, Python, Node.js) : traitement côté serveur
**Sécurité** :
⚠️ **IMPORTANT** : • Toujours valider les données côté serveur • Ne jamais faire confiance aux données utilisateur • Protection contre injections SQL, XSS, etc.
# Simulation de traitement de formulaire
class Formulaire:
def __init__(self, action, methode="POST"):
self.action = action
self.methode = methode
self.champs = {}
def ajouter_champ(self, nom, valeur):
"""Ajoute un champ au formulaire."""
self.champs[nom] = valeur
def soumettre(self):
"""Simule l'envoi du formulaire."""
print(f"\n=== ENVOI FORMULAIRE ===")
print(f"Action : {self.action}")
print(f"Méthode : {self.methode}")
print(f"\nDonnées envoyées :")
for nom, valeur in self.champs.items():
print(f" {nom:15} = {valeur}")
# Simulation validation
return self.valider()
def valider(self):
"""Valide les données du formulaire."""
erreurs = []
# Vérifier qu'aucun champ n'est vide
for nom, valeur in self.champs.items():
if not valeur or valeur.strip() == "":
erreurs.append(f"Le champ '{nom}' est obligatoire")
# Vérifier format email
if 'email' in self.champs:
email = self.champs['email']
if '@' not in email or '.' not in email:
erreurs.append("Format email invalide")
if erreurs:
print(f"\n❌ ERREURS DE VALIDATION :")
for err in erreurs:
print(f" • {err}")
return False
else:
print(f"\n✅ VALIDATION RÉUSSIE !")
print("→ Données envoyées au serveur")
print("→ Email de confirmation envoyé")
return True
# Exemple : Formulaire de contact
print("=== SIMULATION FORMULAIRE DE CONTACT ===")
form_contact = Formulaire(action="/contact", methode="POST")
form_contact.ajouter_champ("nom", "Jean Dupont")
form_contact.ajouter_champ("email", "jean.dupont@exemple.fr")
form_contact.ajouter_champ("message", "Bonjour, je voudrais plus d'informations...")
form_contact.soumettre()
# Exemple avec erreur
print("\n\n=== FORMULAIRE AVEC ERREUR ===")
form_erreur = Formulaire(action="/contact", methode="POST")
form_erreur.ajouter_champ("nom", "Marie Martin")
form_erreur.ajouter_champ("email", "marie-invalide") # Email invalide
form_erreur.ajouter_champ("message", "") # Message vide
form_erreur.soumettre()Quiz de validation
1. Quelle balise crée un formulaire HTML ?
2. Quel attribut est OBLIGATOIRE sur un champ <input> pour que les données soient envoyées ?
3. Quelle méthode HTTP utiliser pour un formulaire de CONNEXION (données sensibles) ?
4. Quel type d'<input> pour un champ de MOT DE PASSE ?
5. Quelle balise pour une zone de texte MULTILIGNE ?
