Formulaires en PHP
Créer un formulaire et le traiter avec PHP
Encore une fois on retrouve la notion de formulaire qui est un des points les plus important dans la réalisation d'un site web dynamique. C'est un moyen très adaptés pour réaliser une attractivité entre le visiteur et le site en question.
De la saisie jusqu'à la récupération des données, nous allons voir toutes les notions de base qu'il faut connaitre lorsque l'on manipule les formulaires. Dans ce contexte, on verra une utilisation fréquente des super globales.
Etant donnée que ce sujet a déjà été traité dans les tutoriels XHTML et CSS, on ne va pas s'y attarder. Rappelons juste qu'il faut utiliser la balise form pour créer un formulaire. A l'inverse, nous allons insister un peu sur les choix des méthodes d'envoi des formulaires.
En effet, les deux valeurs possibles de l'attribut méthode nous permettent d'avoir deux méthodes possibles pour envoyer les données dans un formulaire : soit par la méthode GET soit par la méthode POST.
Les deux méthodes sont à peu près les mêmes puisque toutes les deux permettent d'envoyer des données. Toutefois, chacun a sa façon de gérer les choses et le choix des méthodes utilisées nécessite la vigilance du développeur.
Formulaire avec méthode GET
La méthode GET consiste à transmettre les données via l'URL. Il est intéressant de l'utiliser dans le cas où on veut faire transiter des données de pages en pages. Cependant, il faut avoir conscience que les données seront transmises par http et donc visibles dans la barre d'adresse.
Cet aspect mérite une attention particulière parce que de la sécurité des données est menacée. Dans le cas où les données sont confidentielles, mieux vaut chercher à ne pas utiliser cette méthode. Si toutefois on ne peut s'en passer, il faut essayer de cacher les valeurs transmises en utilisant les cryptages par exemple.
Formulaire avec méthode POST
Une autre méthode pour l'envoi des formulaires est la méthode POST. Il est obligatoire de l'utiliser dans certains cas comme l'envoi de fichiers, envoi de données lourdes, envoi de données confidentielles. La méthode POST est également recommandée si le formulaire déclenche une action spécifique qui doit être renouvelée à chaque fois. Avec la méthode POST, il est possible de revenir en arrière et de re-soumettre le formulaire.
Récupération des données
Dans l'attribut action d'un formulaire, on spécifie l'adresse du fichier dans lequel les données sont renvoyées et traitées.
Utilisation des super globales
Les données transmises se trouvent souvent sous forme de tableau dans des variables qu'on appelle des superglobales :
Le tableau $_GET permet de récupérer toutes les données envoyées par la méthode GET. Il contient toutes les données transmises via l'URL.
- Le tableau $_POST contient les données envoyées par la méthode POST.
- Le tableau $_FILES est spécifique à l'envoi de fichiers. Il contient les informations du fichier quand l'utilisateur télécharge un fichier via un formulaire.
- Comme pour tout tableau, l'affichage des contenus de ces tableaux se fait par la fonction print_r().
- Cela pourra nous donner un aperçu des données qui sont transmise.
En faisant :
<?php echo '<pre>' ; print_r($_POST) ; echo '</pre>' ; ?>
On a la liste de toutes les valeurs transmises via la méthode POST. Mais ce qui nous intéresse le plus, c'est d'avoir accès à ces données une à une. C'est ce que nous allons voir par la suite.
Exemple de formulaire utilisant la méthode POST :
Code dans formulaire.html
<form method="post" action="questionnaire.php"> <fieldset> <legend>Coordonnées</legend> <label for="titre">Titre : </label> <select name="titre"> <option value="Mme" selected="selected">Madame</option> <option value="Mlle">Mademoiselle</option> <option value="Mr">Monsieur</option> </select> <label for="nom">Nom:</label> <input type="text" name="nom" id="nom" /> <label for="prenom">Prénom:</label> <input type="text" name="prenom" id="prenom" /> <label for="email">Email:</label> <input type="text" name="email" id="email" /> <label for="tel">Téléphone:</label> <input type="text" name="tel" id="tel" /> </fieldset> <fieldset> <legend>Centres d'intérêt</legend> <p>
Quels sont vos centres d'intérêt ?&tt;br />
<input type="checkbox" name="musique" id="musique" /> <label for="musique">musique</label> <input type="checkbox" name="politique" id="politique" /> <label for="politique">politique</label> <input type="checkbox" name="informatique" id="informatique" /> <label for="informatique">informatique</label> <input type="checkbox" name="cuisine" id="cuisine" /> <label for="cuisine">cuisine</label> </p> <</fieldset> input type="submit" value="envoyer" /> </form>
Code dans questionnaire.php
<?php //récupération des données simple echo $_POST['titre'].' '; echo $_POST['nom'].' '; //récupération des cases à coché if(isset($_POST['musique']))// si la case musique est cochée, c'est que le formulaire a envoyé quelque chose { echo $_POST['musique']; } else { echo "Musique non coché"; } ?>
Pour récupérer une donnée, on utilise généralement le nom du champ comme index du tableau $_POST. La fonction isset() permet de savoir si une variable a été affectée ou non. Si vous ne cochez pas la case musique, la variable $_POST['musique'] ne contient pas de valeur. Et puisqu'on en parle, profitons pour voir ce qu'est la fonction empty().
La fonction 'empty()' a le même rôle que la fonction isset() sauf qu'elle renvoie true lorsque la variable vaut 0 ou non définie.
Téléchargement d'un fichier
Pour télécharger un fichier, le champ XHTML associé est un input de type FILE.
Voici un exemple de code qu'on mettra dans un fichier upload.html
<form action="enregistre.php" method="post" enctype="multipart/form-data"> <p> <input type="file" name="fichier" size="40" /> <input type="hidden" name="MAX_FILE_SIZE" value="2048"> <input type="submit" value="Envoyer" /> </p> </form>
Une fois le formulaire validé, les valeurs seront postées dans enregistre.php donc voici le code :
<?php $nom_fichier= $_FILES['fichier']['tmp_name']; echo "nom temporaire:".$nom_fichier; $nom_destination='C:wampwwwimgimage.jpg'; move_uploaded_file($nom_fichier, $nom_destination); ?>
La variable globale utilisée pour les fichiers est $_FILE .
Au moment du téléchargement, PHP essaie de mettre le fichier dans un répertoire temporaire et lui donne un nom temporaire. C'est la fontion move_uploaded_file qui permet de déplacer le fichier dans le répertoire dans lequel vous voulez le mettre. Ensuite, vous pouvez lui spécifier un nom à votre aise.
Le champ caché 'MAX_FILE_SIZE', quant-à lui, permet de spécifier la taille maximum du fichier que l'on va télécharger.