Traitement d'un formulaire en PHP

Nous avons vu qu'il était possible à une page HTML de demander des informations aux visiteurs grâce aux formulaires. Les pages HTML étant statiques, il a fallu découvrir le langage PHP pour pouvoir utiliser les informations transmises et générer une page web personnalisée.

Nous allons donc reprendre le formulaire précédent et générer une réponse à celui-ci.

Page du formulaire

Elle reprend le code vu précédemment et demande le nom, prénom, age et sexe du visiteur (le sexe est demandé par 2 méthodes différentes).

<!DOCTYPE html> <!--Déclaration de la page HTML --> <html lang="fr"> <!-- Début de page écrite en français --> <head> <!-- Début entête --> <meta charset="UTF-8"> <!-- Codage des caractères (important mais sera vu plus tard) --> <title>Connaitre le visiteur</title> <!--link href="style.css" rel="stylesheet" type="text/css" /> <!-- Autre fichier (ici mise en forme) utile à la page --> </head> <!-- Fin de entête --> <body> <!-- Début du corps --> <h1>Une page pour faire connaissance</h1> <p>Bonjour, <br />j'aimerai vous connaître</p> <FORM action="reponse.php" method="POST"> <FIELDSET> <LEGEND>Identité</LEGEND> <LABEL for='n'>Votre nom ? </LABEL><INPUT type="text" name="nom" id='n' size="30" /><BR/> <LABEL for='p'>Votre prénom ? <INPUT type="text" name="prenom" id='p' size="20" /> </FIELDSET> <FIELDSET> <LEGEND>Informations</LEGEND> <LABEL for='a'>Votre age ? </LABEL><INPUT type="text" name="age" id='a' size="3" /><BR/> votre sexe méthode 1 ? <INPUT type="radio" name="sexe1" value="M" id='m' /> <LABEL for='m'>Masculin</LABEL> <INPUT type="radio" name="sexe1" value="F" id='f' /> <LABEL for='f'>Féminin</LABEL> <INPUT type="radio" name="sexe1" value="?" id='i' checked /> <LABEL for='f'>indeterminé</LABEL> <BR/>votre sexe méthode 2 ? <SELECT name="sexe2"> <OPTION value="?" selected>Choisir</OPTION> <OPTION value="M">Masculin</OPTION> <OPTION value="F">Féminin</OPTION> </SELECT> </FIELDSET> <INPUT type="submit" value="Envoyer" name="ok" /> <INPUT type="reset" value="Effacer" /> </FORM> </body> <!-- Fin du corps --> </html> <!-- Fin de la page -->

Variables et instructions utiles en PHP

Les données du formulaire sont transmises dans un tableau $_POST. Il correspond à l'attribut “method” et il contient une liste de variables et leurs valeurs : $_POST[“nom”], $_POST[“prenom”], $_POST[“age”], $_POST[“sexe1”], $_POST[“sexe2”], $_POST[“ok”]. Le nom des variables correspond à la valeur de l'attribut “name” des champs du formulaire.

La validation du formulaire le transmet son contenu à la page indiquée dans son attribut “action” soit “reponse.php” (validation = clic sur “Envoyer”). Si “action='#”“, il sera transmis à la page qui a demandé les informations (même page).

L’existence d'une variable peut être testée par la fonction isset(variable);. Le caractère '!' utilisé en début de condition inverse celle-ci [if (!vrai) = if (faux)].

Page de la réponse

Elle précisera au visiteur les informations transmises et sera composé de HTML et de PHP.

<!DOCTYPE html> <!--Déclaration de la page HTML --> <html lang="fr"> <!-- Début de page écrite en français --> <head> <!-- Début entête --> <meta charset="UTF-8"> <!-- Codage des caractères (important mais sera vu plus tard) --> <title>Connaitre le visiteur</title> <!--link href="style.css" rel="stylesheet" type="text/css" /> <!-- Autre fichier (ici mise en forme) utile à la page --> </head> <!-- Fin de entête --> <body> <!-- Début du corps --> <h1>Une page pour faire connaissance</h1> <?php if (! isset ($_POST["ok"])) { echo "\t<p>Vous n'avez pas répondu à mes questions et appelé la page directement.</p>\n"; } else { echo "\t<p>Merci d'avoir répondu à mes questions.</p>\n"; echo "\t<p>Si j'ai bien compris :<br />\n"; echo "\t\t<ul>\n"; printf ("\t\t\t<li>Vous vous appelez : %s %s</li>\n", strtoupper($_POST["nom"]), ucwords($_POST["prenom"])); if ($_POST["nom"] == "") echo "\t\t\t<li> - en fait vous n'avez pas de nom</li>\n"; if ($_POST["prenom"] == "") echo "\t\t\t<li> - en fait vous n'avez pas de prenom</li>\n"; printf ("\t\t\t<li>Vous avez : %d ans</li>\n", $_POST["age"]); if ($_POST["age"] < 10) echo "\t\t\t<li> - vous me paressez très jeune ?</li>\n"; if ($_POST["age"] > 90) echo "\t\t\t<li> - vous me paressez très vieux ?</li>\n"; if ($_POST["sexe1"] != $_POST["sexe2"]) echo "\t\t\t<li> - vous ne semblez pas sur de votre sexe ?</li>\n"; else switch ($_POST["sexe1"]) { case "M": echo "\t\t\t<li>Vous êtes un homme.</li>\n"; break; case "F": echo "\t\t\t<li>Vous êtes une femme.</li>\n"; break; default: echo "\t\t\t<li>Vous ne connaissez pas votre sexe.</li>\n"; } echo "\t\t</ul>\n"; } echo "\t</p>\n"; ?> </body> </html>