PHP (PHP Hypertext Preprocessor)

Auteur: Mohamed CHINY Durée necessaire pour le cours de PHP (PHP Hypertext Preprocessor) Niveau recommandé pour le cours de PHP (PHP Hypertext Preprocessor) Supports vidéo non disponibles pour ce cours Exercices de renforcement disponibles pour ce cours Quiz disponible pour ce cours

Page 6: Formulaires et fonctions agissant sur les variables

Toutes les pages

Récupération des champs de formulaire

Supposons que nous disposons d'un formulaire déclaré comme ceci:
<form method="post" action="">
   <input type="text" name="prenom" /><br />
   <input type="submit" name="valider" value="Vérifier" />
</form>
Bien entendu, c'est ce qu'il y a de plus simple en HTML. Il s'agit d'un formulaire qui contient deux champs, une zone de texte au nom de prenom et un bouton d'envoi du nom de valider. Le formulaire utilise la méthode POST et envoie ses valeurs à la page courante une fois le bouton d'envoi actionné.

Sur la page qui est sensée traiter le formulaire (la page courante dans ce cas), on doit d'abord récupérer les valeurs postées par celui-ci. Pour ce faire, on recourt aux variables (tableaux) superglobales $_POST et $_GET.

Variables $_POST et $_GET

La variables $_POST est en réalité un tableau associatif, c'est à dire un tableau qui utilise des clés au lieux d'indexes (on verra en détail les variables tableau en PHP plus loin dans ce cours).

La variables $_POST contient la valeur du champ de formulaire dont le nom est passé en tant que clé. Par exemple, pour récupérer la valeur que le client a saisi dans la zone de texte nommée prenom, on fait appel à la variable $_POST["prenom"].

La variable $_POST est appelée si le formulaire en question utilise la méthode POST. Si le formulaire utilise la méthode GET alors on appelle la variable $_GET. Tout comme le tableau $_POST, le tableau $_GET utilise comme clé, les noms des champs de formulaires.

$_POST et $_GET sont des variables superglobales, c'est à dire qu'elles sont reconnues dans n'importe quel contexte (à l'intérieur des fonctions comme à l'extérieur, voir même à l'intérieur des méthodes d'une classe dans le cas de PHP5 par exemple).

Fonctions agissant sur les variables

Il existe une multitudes de fonctions qui agissent sur les variables en PHP. Mais les plus pratiques sont généralement:
  • empty(): permet de vérifier si la variable passée en paramètre est vide ou non. Si la variable est vide (elle ne contient aucune valeur) alors la fonction empty() retourne la valeur booléene true, et si la variable testée n'est pas vide (contient une valeur de type quelconque) alors elle retourne false.
  • isset(): permet de vérifier si la variable passée en paramètre existe ou non. Si la variable est déjà évoquée avant la fonction isset(), alors elle existe et cette dernière retourne true, sinon elle retourne false.
  • unset(): permet de supprimer la variable passée en paramètre. Si après la fonction unset() on appelle la fonction isset() en leur passant la même variable, alors celle ci retournera false.
  • gettype(): permet de retourner le type de la variable passée en paramtère
  • is_numeric(): vérifie si la variable passée an paramètre ne contient qu'une suite de caractères numériques. Si oui elle retourne true sinon elle retourne false.
  • is_int(): vérifie si la variable passée an paramètre est de type entier ou non. Si oui, elle retourne true sinon elle retourne false

On trouve aussi les fonctions is_float(), is_long(), is_double(), is_string() et is_bool() qui vérifient chacune le type de variable associée de la même manière que is_int().

Exemple d'application

Pour faire simple, on suppose qu'on veut vérifier si le champ prénom du formulaire précédent n'est pas vide. Une fois le client validera le formulaire en cliquant sur le bouton d'envoi, si le prénom est vide, le message "Prénom invalide" sera affiché en rouge. Sinon (le prénom n'est pas laissé vide quelque soit le texte qu'il contient), alors le message "Prénom valide" sera affiché en vert. Quelque soit le message généré, il sera affiché en bas du formulaire.

Il est tout à fait logique de penser que le traitement entier sera placé en bas du formulaire puisque c'est là où l'un des deux messages "Prénom valide" ou "Prénom invalide" sera affiché. Cependant, je préfère toujours mettre les scripts importants avant même la balise <html>, voir avant le DOCTYPE, s'il s'agit d'un document HTML5. Ce choix est tout à fait justifié, mais je préfère en parler quand le moment sera venu.

Dans ce cas, comment écrire l'un des deux messages voulu en bas du formulaire. La réponse est simple, il suffit d'y afficher une variable que l'on aurait déjà initialisé avant.

Pour ne pas perdre de temps, voilà ma version de code qui permet de réussir le traitement souhaité:
<?php
   @$prenom=$_POST["prenom"];
   @$valider=$_POST["valider"];
   $message="";
   if(isset($valider)){
      if(empty($prenom))
         $message='<font color="#FF0000">Prénom invalide.</font>';
      else
         $message='<font color="#00FF00">Prénom valide.</font>';
   }
?>   
<!DOCYPT html>
<html>
   <head>
      <meta charset="UTF-8" />
   </head>
   <body>
      <form method="post" action="">
         <input type="text" name="prenom" /><br />
         <input type="submit" name="valider" value="Vérifier" />
      </form>
      <?php
         echo $message;
      ?>
   </body>
</html>
Expliquons un peu ce code:
Les deux première lignes du code PHP permettent de créer deux variables $prenom et $valider à partir des champs de formulaires respectifs, zone de texte et bouton d'envoi. La présence de l'arobas mis au début de chacune de ces deux lignes sera expliquée après. Ensuite j'ai initialisé la variable $message avec une chaîne de caractères vide. C'est cette variable qui sera affichée en bas du formulaire (echo $message).

la condition if(isset($valider)) signifie si la variable $valider associée au bouton d'envoi existe. En effet, avant de poster le formulaire, aucune des variables $prenom et $valider n'existe encore, car les variables $_POST qu'on leur a affecté ne seront créés qu'une fois le formulaire (utilisant la méthode POST) est envoyé en cliquant le bouton submit. Donc, ce n'est qu'après avoir posté le formulaire que le bloc d'instructions entre les accolades sera exécuté. Ce bloc contient une autre condition qui consiste à vérifier si la variable $prenom, associée à la zone de texte, est vide. Dans ce cas, le message "Prénom invalide" qu'on a mis dans la balise <font> pour le colorer en rouge sera affecté à la variable $message. Si $prenom n'est pas vide alors la chaîne "Prénom valide" coloré en vert sera affecté à la variable $message.

Masquage des messages d'erreur

Revenons maintenant aux arobas (@). Comme je l'ai précisé dans le paragraphe précédent, aucune des deux variables (tableaux) $_POST n'existe avant de poster le formulaire. Dans ce cas, au premier chargement de la page, les clés "prenom" et "valider" que contiennent les crochés ne seront pas reconnus par le compilateur PHP qui générera des erreurs de notification disant "Indefined index prenom" et "Indefined index valider". Ces erreurs n'interrompent pas l’exécution du script, mais la présence de ces deux messages d'erreur dans la page ne sera pas appréciée. Il existe donc deux solution, soit interdire l'affichage des erreurs en manipulant le fameux fichier php.ini (chose fortement déconseillée lors de la phase développement) ou bien masquer les messages d'erreur en utilisant le symbole arobas (@) avant l'instruction qui la cause. C'est cette deuxième méthode qui me parait plus appropriée dans ce cas.