Quand je vous ai presente PHP au debut de cette section, je vous avais parle d'interactivite avec le visiteur. C'est la que les formulaires sont le plus souvent utilises. En effet un formulaire permet d'interagir avec l'internaute. L'avantage que nous allons voir maintenant est que PHP permet de faire tout et n'importe quoi instantanement en fonction de ce que souhaite le visiteur. Vous allez pouvoir disposer d'un site completement dynamique sans bouger le petit doigt !
Je supposerai que vous savez comment creer des formulaires en (X)HTML, donc je ne ferai pas de rappel pousse sur leur utilisation. N'hesitez donc pas a revoir le cours de HTML si vous pensez avoir des lacunes a ce niveau.
Il existe deux methodes d'envoi de formulaire en (X)HTML : la methode POST et la methode GET. La methode GET transmet les informations du formulaire dans l'adresse du site, adresse qui est limitee en fonction du navigateur a un certain nombre de caracteres et qui est encore moins securisee que la methode POST. Nous allons donc commencer par la methode POST.
PHP va creer lorsque des donnees de formulaires seront disponibles, des variables commencant par $_GET ou $_POST (en fonction de la methode d'envoi et de l'url de la page), vous allez donc voir que d'exploiter les donnees de formulaires est tres simple !
Nous allons commencer par le traitement des formulaires simples comportant une zone de texte. Nous avons attribue une valeur par defaut a la zone de texte. Voyons le code XHTML :
<form action="page.php?formulaire" method="post">
<p><input type="text" name="pseudo" value="Entre ici ton pseudo" /></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
Comme vous pouvez le constater, il n'y a rien de complique la dedans. J'ai juste corse un peu l'adresse de la page php qui sera utilisee pour le traitement. Comme je vous l'ai appris pour la page concernant les variables en PHP, ici une variable nommee $_GET['formulaire'] sera presente mais ne comportera pas de valeur. C'est tout pour les complications :p
Bon tout ca c'est bien beau, mais une fois que le visiteur clique sur "Envoyer" que se passe t-il sur la page "page.php" ? Et bien la variable $_POST['pseudo'] sera cree et sa valeur sera le pseudo qu'a entre le visiteur. Si le visiteur a juste clique sur "Envoyer" sans toucher a la zone de texte, la variable $_POST['pseudo'] aura pour valeur 'Entre ici ton pseudo' qui est la valeur par defaut de cette zone de texte.
Lorsque vous soumettez un formulaire avec PHP via la methode POST, celui-ci cree des variables $_POST['X'] avec 'X' correspondant aux noms des differents champs. Ceci est valable pour tout formulaire. Les valeurs de ces differentes variables correspondent aux valeurs des champs en question.
Pour tout champ de formulaire, lorsque le visiteur ne touche a rien, les valeurs par defaut seront conservees et utilisees de la meme maniere par PHP (qui n'a aucun moyen de savoir si il s'agit d'une valeur par defaut ou d'une valeur remplie par le visiteur). Vous venez maintenant de comprendre pourquoi nous parlerons de securite plus loin sur cette page. En effet, comme PHP ne peut savoir de qui proviennent les informations, il faudra toujours les verifier pour eviter les failles de securite.
Revenons a notre formulaire. Le visiteur a clique et a renseigne son pseudo, maintenant nous voudrions l'afficher. Voici un code tout simple pour la page "page.php" permettant de faire ceci en PHP :
<?php
if(isset($_POST['pseudo'], $_GET['formulaire'])) //On regarde si les variables $_POST['pseudo'] et $_GET['formulaire'] existent, sinon la condition ne sera pas validee
{
echo htmlentities($_POST['pseudo']);
}
?>
Vous remarquerez que l'on regarde d'abord si les variables que l'on souhaite utiliser existent grace a la fonction isset() (qui peut prendre en parametre plusieurs variables). Ceci est tout a fait normal et vous devez proceder de la sorte lorsque vous souhaitez acceder avec PHP a des variables provenant de formulaires, dont vous n'etes pas sur de l'existence. Voyons ce code que n'importe quel debutant (ce n'est pas pejoratif) aurait pu faire :
<?php
echo htmlentities($_POST['pseudo']);
?>
Le probleme de ce code, est qu'il ne verifie pas si la variable $_POST['pseudo'] existe. Ce code peut donc tenter d'afficher une variable qui n'existe pas, ce qui retournera generalement une erreur. Plus grave, si vous utilisez cette variable pour faire des traitements plus pousses, vous pourrez avoir de belles failles de securite dans votre site. Un mot maintenant sur la fonction htmlentities() : elle permet de transformer le code HTML pouvant etre envoye par le visiteur en code visible. En effet, imaginiez que votre visiteur entre comme pseudo "<body>" par exemple, et bien vous ne verrez rien a l'ecran car le texte qu'il aura entre sera interprete comme etant du code HTML (logique, puisque PHP envoie du texte, et <body> est un texte comme un autre pour PHP, il ne fera donc pas la difference). Il faut donc transformer <body> en son code HTML visible. Voila pourquoi on utilise toujours cette fonction.
D'une maniere generale, servez-vous toujours de la fonction htmlentities() lorsque vous tentez d'afficher du texte provenant de formulaires.
Passons maintenant aux zones de texte plus evoluees. Nous allons maintenant traiter le cas de la zone de texte multilignes appelee textarea. Voici un exemple simple en XHTML :
<form action="traitement.php" method="post">
<p><textarea name="description" rows="5" cols="50">Entrez ici une description de votre site</textarea></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
Tout ce qu'il y a de plus classique. Lorsque le formulaire est envoye a la page "traitement.php", vous pourrez recuperer la variable $_POST['description'] (car cette fois-ci le champ porte le nom "description" et non "pseudo") comme nous l'avons fait tout a l'heure. Voila ce que ca donne :
<?php
if(isset($_POST['description'])) //On regarde si la variable $_POST['description'] existe
{
echo htmlentities($_POST['description']);
}
?>
Bon, pour l'instant rien de complique. Nous allons maintenant etudier le cas du select. Comme vous le savez, un <select> peut etre a choix unique ou a choix multiples. Regardons le code pour le select a choix unique. Vous allez voir que la methode de recuperation de la valeur ne differe pas :
<form action="traitement.php" method="post">
<p>
<select name="couleur">
<option value="rouge">Couleur rouge</option>
<option value="vert" selected="selected">Couleur verte</option>
<option value="bleu">Couleur bleue</option>
</select></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
Ici, si nous souhaitons afficher la couleur qu'a selectionne le visiteur, nous utiliserons ce code :
<?php
if(isset($_POST['couleur']))
{
echo htmlentities($_POST['couleur']);
}
?>
Nous allons maintenant passer aux choses plus serieuses avec le select multiple. En effet, imaginions que quelqu'un souhaite commander un article en plusieurs couleurs, il faudra qu'il puisse selectionner plusieurs valeurs d'un coup dans le select. Voyons comment ca se presente en (X)HTML :
<form action="traitement.php" method="post">
<p>
<select name="couleur" multiple="multiple">
<option value="rouge">Couleur rouge</option>
<option value="vert" selected="selected">Couleur verte</option>
<option value="bleu">Couleur bleue</option>
</select></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
Si l'utilisateur selectionne une ou plusieurs valeurs, que va t-il se passer ? Et bien je vous le donne en mille : PHP va creer un tableau $_POST['couleur'] qui contiendra la ou les differentes valeurs que l'utilisateur aura selectionne. Voici un exemple qui affiche toutes les valeurs selectionnees par le visiteur :
<?php
if(isset($_POST['couleur']) AND is_array($_POST['couleur']))
{
foreach($_POST['couleur'] AS $valeur)
{
echo 'Vous avez selectionne la couleur'.htmlentities($valeur).'<br />';
}
}
?>
Notez l'utilisation du is_array() qui permet de verifier si on a bien transmis un tableau. Ceci est tres important car la fonction foreach() necessite un tableau en parametre (ici $_POST['couleur'] est le tableau a parcourir). Si $_POST['couleur'] n'avait pas ete un tableau, vous auriez eu une erreur, c'est donc pour ca que l'on verifie non seulement que $_POST['couleur'] existe mais qu'il est un tableau. Si vous ne vous rappelez plus comment on utilise les tableaux, n'hesitez pas a aller relire le cours les concernant.
D'une maniere generale, pensez a toujours verifier pour les donnees provenant de formulaires, que votre variable est du type que vous attendez, avant d'effectuer un quelconque traitement sur elle.
Voyons maintenant comment on utilise les cases a cocher. On commence comme d'habitude avec un exemple de code XHTML. Le principe consistera a savoir ici si le visiteur veut se connecter automatiquement au site. Pour cela, on utilisera une checkbox. Si le visiteur la coche, il sera connecte automatiquement au site lors de sa prochaine visite, dans le cas contraire rien ne se passera. Voici le code XHTML :
<form action="traitement.php" method="post">
<p><input type="checkbox" name="connexion_automatique" value="1" /></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
Bon jusque la rien de tres complique. Vous allez voir pour la partie de traitement, c'est toujours aussi simple !
<?php
if(isset($_POST['connexion_automatique']))
{
echo 'Vous avez coche la case !';
}
?>
Ici il s'agit d'un cas particulier, en effet, lorsque la case a cocher n'est pas cochee, le navigateur ne renvoie rien, donc la variable $_POST['connexion_automatique'] n'existe pas. Si elle existe, cela signifie donc que la case a ete cochee.
Les boutons radio permettent de ne selectionner qu'une seule option parmis plusieurs. Par exemple si vous demandez "souhaitez-vous recevoir la newsletter mensuelle ?" le visiteur peut repondre "oui" ou "non", mais pas les deux a la fois. Voici ce que ca donne en XHTML :
<form action="traitement.php" method="post">
<p><input type="radio" name="choix" value="oui" />Oui</p>
<p><input type="radio" name="choix" value="non" />Non</p>
<p><input type="submit" value="Envoyer" /></p>
</form>
Ici, pour savoir ce qu'a repondu le visiteur, on fera ceci en PHP :
<?php
if(isset($_POST['choix']))
{
echo htmlentities($_POST['choix']); //affichera "oui" ou "non" en fonction de ce qu'a selectionne le visiteur
}
?>
Les champs caches fonctionnent exactement de la meme maniere que pour un champ de texte simple, la seule difference etant qu'ils ne seront pas affiches sur la page web. Vous pourrez transmettre ainsi des informations que le visiteur n'a pas besoin de remplir. N'allez pourtant pas croire que cette methode est securisee, il s'agit juste d'une methode bien pratique pour transmettre des variables et elle doit donc subir les memes traitements que les autres variables, a savoir une verification minutieuse avant toute utilisation.
Voici un exemple en XHTML :
<form action="traitement.php" method="post">
<p><input type="hidden" name="champ_cache" value="ici ce que vous voulez" />Oui</p>
<p><input type="submit" value="Envoyer" /></p>
</form>
Et voici comment on recupere la valeur de ce champ cache en PHP :
<?php
if(isset($_POST['champ_cache']))
{
echo htmlentities($_POST['champ_cache']); //affiche le contenu du champ
}
?>
Cette methode de transmission de donnees passe par l'url, nous avons vu comment recuperer des donnees en PHP qui provenaient de l'url, il s'agit des variables $_GET['nom'] ou nom est le nom du champ de formulaire dans notre cas.
Voici un exemple en XHTML pour le champ de type hidden :
<form action="traitement.php" method="get">
<p><input type="hidden" name="champ_cache" value="ici ce que vous voulez" />Oui</p>
<p><input type="submit" value="Envoyer" /></p>
</form>
La valeur se recupere de la meme facon, en GET cette fois :
<?php
if(isset($_GET['champ_cache']))
{
echo htmlentities($_GET['champ_cache']); //affiche le contenu du champ
}
?>