Table des matières

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).

formulaire.html
<!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)]. L'instruction strtoupper(texte) transforme le texte entièrement en majuscule et ucwords(texte) le transforme entièrement en minuscule sauf la 1ere lettre de chaque mot en majuscule.

Page de la réponse

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

reponse.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>

Améliorations

Faite calculer l'année de naissance ?