Exercice en PHP - La vérification d'un formulaire d'inscription

Lorsque l'utilisatrice ou utilisateur a complété son formulaire, avant de l'enregistrer, il faut vérifier si tous les champs ont été remplis correctement.

Cette page de vérification va essentiellement consister en un long script enchaînant un grand nombre de tests dont le déroulement, côté serveur, ne sera pas visible. Si la moindre erreur est détectée, elle sera signalée et l'utilisateur/trice sera redirigé.e vers le formulaire afin de corriger son ou ses erreurs. En cas de succès, la page de vérification provoquera l'exécution de la page de traitement.

Voici le texte de ce script de vérification commenté. Vous pourrez l'adapter à votre propre situation.

<h1>Vérification de l'inscription</h1>
<?PHP // On entre en exécution du PHP
// La première chose à faire est de vérifier si la demande d'exécution vient bien du formulaire
$controle = $_POST['controle']; // On copie le champ reçu par POST dans une variable
if ($controle != "sD=51Lk@jHeC1Mpa-") { // Si le code est différent de celui qu'on a envoyé
  // Comme on va procéder essentiellement à des affichages de textes, on utilisera echo avec des guillemets pour éviter les problèmes d'apostrophes dans les phrases affichées
  echo "<p>Veuillez compléter le formulaire pour commencer votre inscription</p>";
  echo "<p><a href='formulaire.html'>Accéder au formulaire</a></p>"; // Lien pour retourner au formulaire (à adapter à votre cas)
  exit; // Provoque l'arrêt anticipé et définitif de l'exécution du script de cette page
  }
$correct = true; // On initialise $correct à vrai (tour du main du signal)
if (empty($_POST['sexe'])) { // On vérifie si "sexe" est vide, càd qu'aucun bouton radio n'a été sélectionné
  echo "<p>Merci de signaler si vous êtes de sexe masculin ou féminin.</p>";
  $correct = false; // On mémorise qu'il y a une erreur (tour de main du signal)
  }
if (empty($_POST['nom'])) { // Si le champ "nom" est vide
  echo "<p>Votre nom n'a pas été complété, sans cette donnée, toute inscription est impossible</p>"; // On affiche l'information
  $correct = false;
  }
if (empty($_POST['prenom'])) { // Si le champ "prénom" est vide
  echo "<p>Votre prénom n'a pas été complété, sans cette donnée, toute inscription est impossible</p>";
  $correct = false;
  }
if (empty($_POST['login'])) {
  echo "<p>Votre suggestion d'identifiant n'a pas été complétée, sans cette donnée, toute inscription est impossible</p>";
  $correct = false;
  }
if (empty($_POST['passw'])) {
  echo "<p>Votre suggestion de mot de passe n'a pas été complétée, sans cette donnée, toute inscription est impossible</p>";
  $correct = false;
  }
if ($_POST['login'] == $_POST['passw']) {
  echo "<p>Merci d'introduire un mot de passe différent de l'identifiant, cette pratique est plus sécure</p>";
  $correct = false;
  }
if (empty($_POST['courriel1'])) {
  echo "<p>Votre première adresse de courriel n'a pas été complétée, sans cette donnée, toute inscription est impossible</p>";
  $correct = false;
  }
if (empty($_POST['courriel2'])) {
  echo "<p>Votre seconde adresse de courriel n'a pas été complétée, sans cette donnée, toute inscription est impossible</p>";
  $correct = false;
  }
if ($_POST['courriel1'] != $_POST['courriel2']) {
  echo "<p>Vos deux adresses de courriel ne correspondent pas, sans cela, toute inscription est impossible</p>";
  $correct = false;
  }
// Si les deux adresses sont identiques, on vérifie que l'arobase se trouve au moins dans l'adresse e-mail, et pas juste à la fin.
elseif ((strpos($_POST['courriel1'],'@') == 0) OR (strpos($_POST['courriel1'],'@') == strlen($_POST['courriel1'])-1)) {
  echo "<p>Votre adresse de courriel n'est pas correcte, il nous sera impossible de vous contacter.</p>";
  $correct = false;
  }
if (empty($_POST['ville'])) {
  echo "<p>Votre ville n'a pas été complétée, sans cette donnée, toute inscription est impossible</p>";
  $correct = false;
  }
if (empty($_POST['pays'])) {
  echo "<p>Votre pays n'a pas été complété, sans cette donnée, toute inscription est impossible</p>";
  $correct = false;
  }
if ($_POST['contrat'] != true) { // Si la case n'a pas été cochée, la valeur sera False
  echo "<p>Vous n'avez pas accepté les conditions d'utilisation.<br />Veuillez le lire attentivement car, sans cela, toute inscription est impossible.<br />Veuillez ensuite cocher la case blanche stipulant votre acceptation des conditions d'utilisation.</p>";
  $correct = false;
  }
if (!$correct) { // Si $correct est à Faux, c'est qu'il y a au moins une erreur (tour du main du signal)
  // Retourne à la page précédente dans l'historique de navigation
  echo "<p><a href='JavaScript:history.back()'>Retourner au formulaire pour le compléter correctement</a></p>";
  exit; // Provoque l'arrêt anticipé et définitif de l'exécution du script de cette page
  }
// A partir d'ici, le formulaire est correct. On copie tous les champs dans des variables pour faciliter les affichages et leur envoi à la page de traitement
$sexe = $_POST['sexe'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$login = $_POST['login'];
$passw = $_POST['passw'];
$courriel = $_POST['courriel1'];
$ville = $_POST['ville'];
$pays = $_POST['pays'];
?> <!-- On sort du PHP et on revient à du HTML -->
<!-- On affiche un récapitulatif du formulaire afin que l'utilisateur/trice le vérifie une dernière fois -->
<form method="post" action="traitement.php"> <!-- action va commander l'exécution de la page "traitement.php" quand le bouton de soumission sera cliqué -->
<p><table border="1" cellpadding="5" align="center">
  <tr>
  <td align="center"><b>Je vérifie mon inscription</b>
  <p><table border=0 align="center">
     <tr><td align="right"><font color="gray">Sexe : </td><td> <?PHP if ($sexe == "m") echo "masculin"; else echo "féminin"; ?></td></tr>
     <tr><td align="right"><font color="gray">Nom : </td><td> <?PHP echo $nom; ?></td></tr>
     <tr><td align="right"><font color="gray">Prénom : </td><td> <?PHP echo $prenom; ?></td></tr>
     <tr><td align="right"><font color="gray">Identifiant : </td><td> <?PHP echo $login; ?></td></tr>
     <tr><td align="right"><font color="gray">Mot de passe : </td><td> <?PHP echo $passw; ?></td></tr>
     <tr><td align="right"><font color="gray">Courriel : </td><td> <?PHP echo $courriel; ?></td></tr>
     <tr><td align="right"><font color="gray">Ville : </td><td> <?PHP echo $ville; ?></td></tr>
     <tr><td align="right"><font color="gray">Pays : </td><td> <?PHP echo $pays; ?></td></tr>
  </table>
  <br /><font color="purple"><b>J'ai lu et accepté les conditions d'utilisation</b></font>
  <!-- Toutes les données vont être continuées vers la page de traitement sous forme de champs cachés -->
  <input type="hidden" name="sexe" value="<?PHP echo $sexe; ?>">
  <input type="hidden" name="nom" value="<?PHP echo $nom; ?>">
  <input type="hidden" name="prenom" value="<?PHP echo $prenom; ?>">
  <input type="hidden" name="login" value="<?PHP echo $login; ?>">
  <input type="hidden" name="passw" value="<?PHP echo $passw; ?>">
  <input type="hidden" name="courriel" value="<?PHP echo $courriel; ?>">
  <input type="hidden" name="ville" value="<?PHP echo $ville; ?>">
  <input type="hidden" name="pays" value="<?PHP echo $pays; ?>">
  <input type="hidden" name="controle" value="sD=51Lk@jHeC1Mpa-">
  <!-- Bouton de soumission qui commandera l'exécution de la page "traitement.php" -->
  <p><input type="submit" value="Je confirme mon inscription">
  </td></tr>
</table>
</form>
<!-- Bouton qui permettra de retourner au formulaire pour corriger une ou plusieurs données -->
<p><a href='JavaScript:history.back()'>Retourner au formulaire pour rectifier une donnée</a>
<!-- Fin du script de la page "verification.php", à compléter par les codes de fin de page habituels...-->

Bon travail.

Retour