Formulaire

Pour permettre des interactions avec les utilisateurs d’un site Internet, le formulaire est essentiel. Il se compose d’un ou plusieurs champs à remplir et d’un bouton. Il est fait en HTML. Le JavaScript peut venir compléter le formulaire pour permettre sa validation ou de l’interaction (formulaire intelligent). Le PHP, quant à lui, permet de traiter les données ou de pré-remplir les champs (dans le cas d’un formulaire de modification).

Formulaire de connexion

Code du formulaire ci-dessus

[début de la page]
<form method="post" action="checkConnection.php">
   <p>
      <label for="name">Nom : </label>
      <input type="text" name="lastname" id="name" />
   </p>
   <p>
      <label for="firstname">Prénom : </label>
      <input type="text" name="firstname" id="firstname" />
   </p>
   <p>
      <input type="submit" name="btnSubmit" value="Soumettre" />
   </p>
</form>

Balises de formulaire

form Définit le début et la fin du formulaire.

Attribut

Exemple

Définition

name

name= »connection »

Définit le nom du Formulaire

method

method= »post »

Définit la méthode d’envoi (POST ou GET)

action

action= »page.php »

Définit la page qui est exécutée au clic du bouton.

input Champ de saisie sur une ligne. Balise auto-fermante. Il faut lui préciser un type de données (text, password, radio, number, email, checkbox, hidden etc). Le type « submit » permet d’envoyer un formulaire dans le cas d’un bouton.

textarea Champ de saisie sur plusieurs lignes.

select Permet de définir une liste déroulante. Chaque élément de la liste est une « option ». Le nom se place sur la balise « select » et il est nécessaire d’ajouter un attribut « value » sur chaque option permettant de récupérer la sélection.

<select name="job">
   <option value="1">Paysagiste</option>
   <option value="2">Médecin</option>
   <option value="3">Bibliothécaire</option>
</select>

Envoi d’un formulaire

Pour qu’un formulaire s’envoie, il faut définir une méthode d’envoi dans la balise form, une action et avoir un bouton de type submit.

Par défaut, si la méthode n’est pas spécifiée, c’est la méthode GET qui est utilisée. Par défaut, si l’action n’est pas utilisée, c’est l’action # qui est utilisée (on reste sur la même page).

Cependant, il est recommandé de définir la méthode et l’action pour éviter des mauvaises surprises.

// Définir la méthode
<form method="post" action="page.php">

// Avoir un bouton de type submit
<input type="submit" value="Envoyer" />

ou

<button type="submit">Envoyer</button>

Traitement en GET

La méthode GET permet de passer les données du formulaire directement depuis l’URL de la page. C’est rarement utilisé dans la cadre d’un formulaire à remplir vu que les informations sont directement visible. C’est plutôt utilisé dans le cadre d’un formulaire de recherche ou pour atteindre une page avec des variables définies. Il ne faut pas oublier qu’il existe une limite de caractères dans l’URL, c’est pourquoi, cette méthode n’est pas des plus adaptée.

Pour récupérer le contenu des données passés en GET, une variable super-globale $_GET existe. C’est un tableau associatif rempli avec les données.

Si dans un formulaire, il y a un champ pour le prénom nommé « firstname », il est possible de récupérer sa valeur ainsi :

<input type="text" name="firstname" value="toto" />

$_GET["firstname"]; // toto

L’URL ressemble à ceci :

http://nomdedomaine.ext/page.php?firstname=toto

Traitement en POST

Le méthode POST permet de passer les données du formulaire de manière masquée. Elles sont traitées dans l’en-tête du message HTTP, elles ne sont pas cryptées. C’est le même principe que pour le GET, c’est une super-globale, cette fois-ci appellée $_POST qui est sous forme de tableau associatif. $_POST n’a pas de limite, ce sont les réglages du serveur qui font foi.

<input type="text" name="firstname" value="toto" />

$_POST["firstname"]; // toto

En cas de formulaire qui contient des données sensibles, le protocole https est fortement recommandé.

Traitement des fichiers et images

Dans un formulaire, il est parfois utile de pouvoir ajouter des documents (pdf, word, etc.) ou des images (image de profil, capture d’écran, etc.). Ce n’est rien d’autre qu’un formulaire avec 2-3 options en plus.

Formulaire de téléchargement

Formulaire de téléchargement
<form action="uploadFile.php" method="post" enctype="multipart/form-data">
   <p>
      <label for="printscreen">Fichier à télécharger</label>
      <input type="file" name="printscreen" id="printscreen" />
   </p>
   <p>
      <input type="submit" value="Envoyer" />
   </p>
</form>

Pour télécharger un fichier ou une image, c’est obligatoirement la méthode POST qui est utilisée. En effet, c’est difficile de passer une telle quantité de donnée dans une URL.

De plus, un attribut supplémentaire à la balise form est ajouté (enctype= »multipart/form-data ») permettant de prendre en compte le traitement des images. Par défaut, les caractères sont encodés avant l’envoi (les espaces sont convertis en + et les caractères spéciaux transformé en ASCII) (enctype= »application/x-www-form-urlencoded »).

Pour récupérer les données du formulaire, nous connaissons la super-globales $_POST. Cette dernière fonctionne très bien pour tous les champs simples. Mais pour récupérer les données d’un téléchargement, une autre super-globale est utilisée: $_FILES.

Plusieurs informations provenant d’un fichier sont stockées, telles que son nom, son type, son code erreur, son nom temporaire et sa taille.

Dans le cas d’un formulaire en POST avec des champs simples et des champs de téléchargement, les champs simples seront traités avec un $_POST[« nomDuChamp »] et les champs de téléchargement avec un $_FILES[« nomDuChamp »].

J’ai inséré une image « capture.jpg » dans mon champ « printscreen », voici ce que je peux récupérer :

//capture.jpg (nom d'origine de mon fichier téléchargé)
$_FILES["printscreen"]["name"];

//image/jpeg (type de mon fichier)
$_FILES["printscreen"]["type"];

//xdhgqjd.jpg (nom que le serveur va attribuer à mon fichier pour éviter qu'il écrase
//un autre fichier avec le même nom)
$_FILES["printscreen"]["tmp_name"];

//0 (signifie que tout s'est bien passé)
$_FILES["printscreen"]["error"];

//37465 (taille du fichier en octets)
$_FILES["printscreen"]["size"];

Une fois que les données ont été récupérées via $_FILES, il faut déplacer le fichier dans un répertoire du site web afin de le stocker. Une méthode de déplacement est utilisée qui a deux arguments : move_uploaded_file (fichier source, destination du fichier)

$source = $_FILES["printscreen"]["tmp_name"];

//La destination permet de définir non seulement le chemin du ficher, mais aussi
//un nouveau nom si nécessaire
$destination = "images/" . date("YmdHis") . $_FILES["printscreen"]["name"];


move_uploaded_file($source, $destination);

php.ini

C’est le fichier de configuration de PHP, chaque serveur en contient un. Il permet d’indiquer des directives, de fixer de valeurs ou d’activer des modules complémentaires. Voici les variables qui s’y rapportent :

file_uploads : Autorise ou non l’envoi de fichiers (ON / OFF)

upload_tmp_dir : Répertoire temporaire d’accueil du fichier

upload_max_filesize : Définit la taille maximale autorisée pour l’envoi d’un fichier (ex: 2Mo)

post_max_size : Définit la taille maximale pour l’envoi d’un formulaire en POST (tous les champs compris). (ex: 8Mo)

Tous ces paramètres sont accessibles depuis le fichier php.ini ou en utilisant la méthode phpinfo() dans un fichier php.