Auteur : SD
Créé le : 29-11-2015
Les formulaires en PHP
Les formulaires permettent à l'utilisateur d'envoyer des données vers le serveur.
Le formulaire est introduit par la balise HTML <form>.
Code de base d'un formulaire
<form method="post" action="traitement.php">
</form>
- L'atribut "method" : ici j'ai utilisé POST, on peut également utiliser GET.
- GET est la méthode par défaut, il ne faut pas l'utiliser si le formulaire contient d'informations sensibles car elles apparaissent en clair dand l'URL. En outre la méthode GET ne permet pas l'upload de fichiers.
- POST permet d'uploader des fichiers et offre une meilleur sécurité car les informations n'apparaissent pas dans l'URL.
- L'atribut "action" : il contient le nom du script php qui sera appelé lorsque le formulaire sera validé par l'utilisateur.
Les différents contrôles
La liste ci-dessous n'est pas exhaustive.
Texte | <input type="text" /> |
Nombre | <input type="number" /> |
Bouton radio | <input type="radio" name="etat" value="on" checked/> |
Case à cocher | <input type="checkbox" name="accept" id="accept" checked="checked" /> |
Bouton | <input type="submit" value="Submit" /> |
Liste déroulante | <select name="section">...</select> |
Slider | <input name="slider" type="range" min="0" max="20" step="1" value="5" /> |
Zone de texte | <textarea name="memo" rows="5" cols="30">Contenu dans la zone de texte</textarea> |
Pour chaque contrôle, l'atribut "name" servira de nom de variable dans le script php qui traitera les informations. Il faut donc que ces noms soient uniques.
Exemple de formulaire
<!DOCTYPE html>
<html>
<head>
<title>Test méthode POST</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<form action="formulaire.php" method="POST">
<select name="titre">
<option>Mlle</option><option selected>Mme</option><option>M.</option>
</select>
<label for="nom"> Nom : </label><input type="text" name="nom" id="nom" placeholder="Entrez votre nom" /><br/><br/>
<label for="prenom">Prénom : </label><input type="text" name="prenom" id="prenom" value="Prénom par défaut" /><br/><br/>
<label for="sexe">Sexe : </label>
<input type="radio" name="sexe" id="sexe" value="H" checked /> Masculin
<input type="radio" name="sexe" value="F" /> Féminin
<br/><br/>
<label for="age">Age : 1 </label>
<input type="range" name="age" id="age" min="1" max="99" step="1" value="18" /> 99
<br/><br/>
<input type="checkbox" name="bDebutant" checked="checked" /> Je débute en PHP<br/><br/>
<input type="submit" name="btOK" value="OK">
</form>
</body>
</html>
Le code ci-dessus affiche le formulaire mais ne fait aucun traitement.
Traitement du formulaire
Comment accéder aux valeurs qui ont été saisies dans le fomulaire ?
Nous allons dans un premier temps simplement afficher les informations reçues par le script php lorsque l'utilisateur valide le formulaire. Ces informations sont contenues dans la variable php $_POST ($_GET si votre formulaire utilise la méthode GET).
Créer un fichier php appelé formulaire.php et y copier le code ci-dessus.
Ajouter le code ci-dessous au tout début du fichier (avant <!DOCTYPE...>)
<?php
if($_POST) {
echo 'Contenu de la variable $_POST : >';
print_r($_POST);
}
?>
En exécutant notre script, on remarque que la variable $_POST est un tableau associatif. L'attribut "name" de chaque contrôle du formulaire est utilisé comme clé associée à la valeur saisie dans le formulaire.
On accède par exemple au nom qui a été tapé en écrivant : $_POST['nom']
Exemple d'exploitation des valeurs saisies dans le formulaire
Modifier le code php du fichier précédent comme indiqué ci-dessous :
if($_POST) {
if($_POST['nom']!='') {
echo "<br/><br/>Bonjour " . $_POST['titre'] . " " . $_POST['nom'] . "!<br/>";
echo "Je peux vous appeler " . $_POST['prenom'] . "<br/><br/>";
if(isset($_POST['bDebutant'])) {
echo "C'est une bonne idée de commencer à apprendre à programmer en PHP !<br/><br/>";
}
else {
if($_POST['sexe']=='H') {
$mot = "débutant";
}
else {
$mot = "débutante";
}
echo "Comme vous n'êtes pas " . $mot . " vous pouvez passer directement au mini-projet !<br/><br/>";
}
}
}
La fonction isset() permet de tester si une variable existe et est différente de NULL.
Sécurité
Le code ci-dessus a le gros défaut de "faire confiance" à l'utilisateur en ne vérifiant pas les informations reçues. En effet, un utilisateur mal intentionné peut par exemple à la place de son nom mettre du code HTML ou Javascript ce qui représente une faille de sécurité très importante.
Taper par exemple : <script> alert('Site Hacké !!!'); </script> à la place de votre nom et valider le formulaire.
Il faut donc systématiquement supprimer ou "échapper" les éventuelles balises que l'utilisateur aurait pu envoyer. Pour cela le langage php met à notre disposition 2 fonctions :
- htmlspecialchars() : Convertit les caractères spéciaux en entités HTML (par exemple "<" (inférieur à) devient "<")
- strip_tags() : Supprime les balises HTML et PHP d'une chaîne
Première modification
Sécuriser le fomulaire en utilisant la fonction strip_tags() pour tous les champs utilisés.
Insérer une copie d'écran de votre code PHP dans votre rapport.
Deuxième modification
Dans l'état actuel, lorsque un utilisateur valide le formulaire, les informations qu'il a rentré dans les différents contrôles ne sont pas conservées (par exemple si il a décoché la case "Je débute en PHP" celle-ci est de nouveau cochée une fois le fomulaire validé).
Faire en sorte que les informations saisies soit conservées dans le formulaire une fois que celui-ci a été validé.
Exemple pour le champ "prenom" :
...
<input type="text" name="prenom" value="<?php if($_POST) echo strip_tags($_POST['prenom']); ?>" /><br/><br/>
...
On peut traduire le code php inséré à la place de la valeur de l'attribut "value" par : Si la variable $_POST existe alors afficher le prénom entré par l'utilisateur (sécurisé par strip_tags).
Insérer une copie d'écran de votre code PHP dans votre rapport.
Mini-projet
Créer un site internet en php composé de 3 pages :
- Une page d'accueil (page principale) offrant des liens vers les 2 autres.
- Une page avec un formulaire où l'utilisateur peut entre un nombre entier. Ce nombre sera convertit en chiffre Romain lorsqu'il validera le formulaire (réutiliser le code du premier TP sur PHP). Il sera possible de revenir à la d'accueil depuis cette page.
- Une page avec un formulaire où l'utilisateur peut entrer 3 nombres entiers compris entre 0 et 255 (utiliser des listes déroulantes <SELECT>). Ces 3 nombres correspondant aux composantes RVB (Rouge, Verte et Bleue) on affichera un rectangle de la couleur correspondante lorsque l'utilisateur validera le formulaire (réutiliser le code du premier TP sur PHP). Il sera possible de revenir à la d'accueil depuis cette page.
Le code HTML de chaque page généré par votre code PHP devra être valide (valider votre code HTML sur le site w3.org)
Insérer une capture d'écran de la validation dans votre rapport.
Articles connexes
Vous avez apprécié cet article ? Partagez le !
Article connexe : Premiers pas en PHP