Récupérer les valeurs d'un formulaire  

Quand l'un de vos visiteurs entre les informations dans un formulaire, celle-ci sont récupérées sous forme de variables.

Le nom de ces variables dépend de la méthode d'envoi du formulaire. Comme dans notre exemple suivant la méthode d'envoi est POST, il faut mettre comme nom $_POST['nom_du_champ'].

 

Formulaire HTML

Les formulaires HTML sont la méthode la plus simple pour avoir des interactions avancées avec l'utilisateur. Ils vous permettront par exemple de :

  • créer un espace sécurisé ;
  • donner la possibilité à vos clients de modifier eux-mêmes le contenu de leur site ; interagir avec le visiteur en lui demandant des informations complémentaires ;
  • faire une page de recherche.

Déclaration d'un formulaire

Balise form

Les balises <form> et </form> permettent d'indiquer le début et la fin d'un formulaire. Ainsi, dans votre page HTML, vous aurez le code suivant :

  1. <form action='reception_formulaire.php' method='post'>
  2. <!--
  3. Différents champs et balises de données.
  4. -->
  5. </form>

 

L'attribut action de la balise form indique la page a laquelle vous allez envoyer votre formulaire. Certaines personnes renvoient le formulaire sur lui-même. Nous vous conseillons de le faire sur une page différente, au moins dans un premier temps.

L'attribut method de la balise form indique la méthode qui va être utilisée pour envoyer le formulaire HTML.

Les méthodes

La méthode POST s'impose dans les cas suivants :

  • envoi d'un fichier ;
  • envoi de données importantes en taille ;
  • envoi de données confidentielles (un mot de passe par exemple) ;
  • si le formulaire déclenche une action spécifique qui doit être renouvelée à chaque fois (modération d'un article par exemple).

La méthode GET est recommandée pour tous les autres cas. Elle est adaptée à un comportement d'affichage uniquement lorsque le résultat peut être mis en cache (recherche sur un site, affichage d'un article défini, etc.).

 

Les balises HTML pour les formulaires

Les champs de texte

Les champs de saisie de texte sont probablement les balises les plus utilisées dans des formulaires. Ils sont créés à partir de la balise <input> en définissant l'attribut type comme étant du texte (type="text"). On utilise ce type de champ quand on a besoin de recueillir de la part de l'utilisateur des mots ou des textes de taille limitée.

 

Champ texte
  1. form action="./form.php" method="POST"><p>
  2. Contenu de l'article :<br />
  3. <textarea name="texte_long"></textarea>
  4. <input type="submit" value="Soumettre la requête">
  5. </p></form>

 

Zone de texte

Nous venons de voir comment gérer un champ texte. Celui-ci est suffisant pour de petites phrases contenant au maximum une vingtaine de mots. Il est souvent nécessaire de disposer d'un affichage permettant de caler une plus grande zone de texte. Pour cela, on utilise des zones de texte délimitées par les balises <textarea></textarea> .

Champ de texte
  1. <form action="./form.php" method="POST"><p>
  2. Contenu de l'article :<br />
  3. <textarea name="texte_long"></textarea>
  4. <input type="submit" value="Soumettre la requête">
  5. </p></form>

 

Réception des données en PHP

Quand un formulaire est envoyé vers un script PHP (l'adresse dans l'attribut action est celle d'un de vos scripts), le moteur lit les différentes informations du formulaire et les présente de façon simple au développeur.

Les superglobales

Toutes les données envoyées se retrouvent dans ce qu'on appelle des superglobales. Il s'agit de tableaux qui ont une portée globale où qu'ils soient utilisés. Vous pouvez y accéder depuis un contexte global, depuis une fonction ou une méthode de classe sans avoir besoin de vous soucier de la portée des variables.

Nous utiliserons quatre superglobales :

  • Le tableau $_GET[] contient toutes les données envoyées via l'URL.
  • Le tableau $_POST[] contient les données envoyées via un formulaire en POST (attribut method="post").
  • Le tableau $_FILES[] contient les informations sur les fichiers envoyés par le visiteur.
  • Le tableau $_REQUEST[] est quant à lui une fusion des deux premiers avec la superglobale $_COOKIE[] que vous découvrirez dans le chapitre 10. Si des données avec le même nom sont envoyées via plusieurs méthodes, la priorité est donnée aux cookies, puis à la méthode POST.

Généralement on utilise $_REQUEST[] et $_FILES[]. $_POST[] et $_GET[] ne sont utiles que si on souhaite savoir précisément d'où vient la donnée, ou s'il y a un risque d'avoir deux données avec le même nom.

 

Récupération d'une donnée simple

Pour récupérer le contenu d'un champ de formulaire du nom de X, il suffit de lire l'index X de la superglobale.

Le formulaire
  1. <form action="form.php" method="POST"><p>
  2. <form action="form.php" method="POST"><p>
  3. Entrez votre texte : <br />
  4. <input type="text" name="montexte"><br />
  5. <input type="Submit">
  6. </p></form>

 

le code

Exemple
  1. <?php
  2. echo $_REQUEST['montexte'] ;
  3. ?>

 

Téléchargements d'images et de fichiers

Le formulaire HTML

Il est tout à fait possible dans un formulaire de permettre à un utilisateur d'envoyer des images ou des fichiers dont il dispose sur son poste.

On utilise dans ce but la balise <input type="file"> . Contrairement aux autres balises, il faut spécifier dans la balise <form> que nous enverrons des données autres que textuelles. Pour cela, on se sert de l'attribut enctype en lui attribuant la valeur multipart/form-data.

Formulaire HTML
  1. <form action="up.php" method="POST" enctype="multipart/form-data">
  2. <P>
  3. <input type="file" name="fichier" size="40">
  4. <input type="submit" value="Envoyer">
  5. </P>
  6. </form>

 

Récéption

Les fichiers envoyés avec un formulaire se traitent différemment des autres données. La différence la plus visible est l'utilisation de la superglobale $_FILES[]. C'est avec cette dernière que vous pourrez accéder aux fichiers téléchargés.

Il s'agit d'un tableau associatif à deux niveaux. Le premier champ doit être le nom du champ de formulaire (fichier dans notre exemple), le second paramètre concerne plusieurs informations sur le fichier transmis :

  • $_FILES['fichier']['name'] : nom et adresse originels du fichier sur le disque de l'utilisateur ;
  • $_FILES['fichier']['type'] : type mime du fichier ;
  • $_FILES['fichier']['size'] : taille du fichier en octets ;
  • $_FILES['fichier']['tmp_name'] : nom et adresse du fichier temporaire stocké sur le serveur ;
  • $_FILES['fichier']['error'] : code erreur associé au téléchargement.

PHP crée un fichier temporaire sur le serveur pour chaque fichier envoyé. Ce fichier étant détruit automatiquement à la fin de l'exécution du script, vous avez généralement besoin de le sauvegarder à un emplacement définitif. Cet enregistrement peut se faire par l'intermédiaire de la fonction move_uploaded_file().

Exemple de code
  1. <?php
  2. $nom_fichier = $_FILES['img']['tmp_name'];
  3. $nom_destination = './img/725.jpg';
  4. move_uploaded_file($nom_fichier, $nom_destination);
  5. ?>

Retour à l'accueil des articles