La communauté ALL HTML c'est 58423 membres à ce jour dont 3 inscrits aujourd'hui et 28 depuis une semaine.

Communauté ALL HTML : telnes

Gestion des variables de formulaire

Cet article est actuellement publié sur le site.

Photo de telnes Article publié le mercredi 19 juillet 2006 par telnes.
Cet article est classé dans les catégories « PHP »

Dans cette publication nous n’allons pas aborder les différents éléments HTML utile à la réalisation d’un formulaire. Nous traiterons uniquement le coté récupération des variables.
Les exemples qui vont êtres utiliser sont obligatoirement à tester dans le répertoire www, httpd, … (en local ou sur le net) avec PHP installé.

Gestion des formulaires



Index



  1. Formulaire simple
  2. Formulaire à choix multiple
  3. Formulaire et sécurité
  4. Astuce debug 1


1. Exemple de formulaire simple :



Créer un fichier formulaire1.html et dans le même dossier créer traitement1.php

formulaire1.html

<html> <body> <form method="POST" action="traitement1.php" name="monform"> Nom : <input type="text" name="nom" ></br> prenom : <input type="text" name="prenom" ></br> age : <input type="text" name="age" ></br> <input type="submit" value="go"> </form> </body> </html>

Voici un formulaire qui est composé de 3 champs (nom,prenom et age).
On aperçoit, dans la balise form, le champ method qui permet de préciser la façon d’envoyer les données sur la page traitement.php. Ici nous avons utilisé la méthod POST qui passe les informations dans l’entête du fichier ! Elles ne sont donc pas visibles par les internautes. L’autre méthode est GET qui elle passe les informations dans l’url ! Donc visible par les internautes.
A vous de choisir la bonne méthode, par exemple suivant la criticité des informations.

traitement1.php

<?php //on récupère nos valeurs $nom = $_POST['nom']; $prenom = $_POST['prenom']; $age = $_POST['age']; //on les affiches echo 'nom : '.$nom.'</br>'; echo 'prenom : '.$prenom.'</br>'; echo 'age : '.$age.'</br>'; ?>


La variable $_POST est un tableau qui contient toutes les variables du formulaire envoyé à la page avec la méthode POST qui à avec pour indice les ‘name’ du champ ! On voit bien dans l’exemple que le champ <input type="text" name="nom"> est récupérer par $_POST['nom'].

Pour récupérer les variables avec la méthodes GET il faut passer par $_GET[''].



2. Gestion des choix multiples



Pour gérer un champ qui a plusieurs possibilités il faut passer par un tableau coté HTML.
Exemple : on veut demander à l’internaute les langues qu’il maitrise, il aura donc la possibilité de répondre/cocher plusieurs choix.

Créer les deux fichiers formulaire2.hml et traitement2.php

formulaire2.html

<html> <body> <form method="POST" action="traitement2.php" name="monform"> <!-- parametres de l exemple 1 --> Nom : <input type="text" name="nom" ></br> prenom : <input type="text" name="prenom" ></br> age : <input type="text" name="age" ></br> <!-- nouveaux parametres --> langue(s) parlées : </br> francais <input type="checkbox" name="langue[]" value="fr"></br> anglais <input type="checkbox" name="langue[]" value="eng"></br> portugais <input type="checkbox" name="langue[]" value="por"></br> espagniol <input type="checkbox" name="langue[]" value="esp"></br> <input type="submit" value="go"> </form> </body> </html>

On à ajouté 4 checkbox pour représenter un choix de langue et on a mis comme name langue[]. On va récupérer dans traitement2.php un tableau contenant les langues cochées.

Traitement2.php

<?php //on récupère nos valeurs $nom = $_POST['nom']; $prenom = $_POST['prenom']; $age = $_POST['age']; //on récupère le tableau des langues $tab_lang = $_POST['langue']; //$tab_lang est un tableau !!!! //on les affiches echo 'nom : '.$nom.'</br>'; echo 'prenom : '.$prenom.'</br>'; echo 'age : '.$age.'</br>'; echo 'langue(s) cochée(s) : '; //affichage des langues cochées //pour plus de précision sur foreach [url=http://fr.php.net/manual/fr/control-structures.foreach.php]http://fr.php.net/manual/fr/control-structures.foreach.php[/url] foreach($tab_lang as $lang){ echo $lang.' '; } ?>

On constat que si on ne coche aucune langue on à le message d’erreur suivant : Notice: Undefined index: langue in c:\program files\easyphp1-8\www\test\tutorial\traitement4.php on line 16
Ce qui est toute à fait normal car on n’a pas envoyé de variable langue (rien coché) donc $_POST[‘langue’] est indéfinie !!! Cette erreur ce répercute sur la boucle foreach qui elle ne trouve pas de tableau. J’insiste donc pour bien dire qu’il faut toujours tester les variables que l’on reçoit (ou reçoit pas) pour éviter les messages d’erreur et les problèmes de sécurité !!

Remarque : On peut mettre un indice dans le tableau par exemple : langue[fr]

formulaire3.html

<html> <body> <form method="POST" action="traitement3.php" name="monform"> <!-- parametres de l exemple 1 --> Nom : <input type="text" name="nom" ></br> prenom : <input type="text" name="prenom" ></br> age : <input type="text" name="age" ></br> <!-- nouveaux parametres --> langue(s) parlées : </br> francais <input type="checkbox" name="langue[fr]" value="francais"></br> anglais <input type="checkbox" name="langue[eng]" value="anglais"></br> portugais <input type="checkbox" name="langue[por]" value="portugais"></br> espagniol <input type="checkbox" name="langue[esp]" value="espagniol"></br> <input type="submit" value="go"> </form> </body> </html>

traitement3.php

<?php //on récupère nos valeurs $nom = $_POST['nom']; $prenom = $_POST['prenom']; $age = $_POST['age']; //on récupère le tableau des langues $tab_lang = $_POST['langue']; //$tab_lang est un tableau !!!! //on les affiches echo 'nom : '.$nom.'</br>'; echo 'prenom : '.$prenom.'</br>'; echo 'age : '.$age.'</br>'; echo 'langue(s) cochée(s) : '; //affichage des langues cochées //pour plus de précision sur foreach [url=http://fr.php.net/manual/fr/control-structures.foreach.php]http://fr.php.net/manual/fr/control-structures.foreach.php[/url] foreach($tab_lang as $key=>$lang){ echo $lang.'('.$key.') '; } ?>


Remarque :

Pour une liste déroulante à choix multiple il suffit d’appliquer la même règle pour le name

Exemple de code HTML (à mettre entre les balises form !)

<select name="pays[]" size="4" multiple> <option value="fr">france</option> <option value="eng">angleterre</option> <option value="esp">espagne</option> <option value="por">portugal</option> </select>

Il suffit de faire des ctrl+clik pour en sélectionner plusieurs. De la même manière que pour les checkbox on récupérera un tableau pays avec pour indice 0 à n qui contiendra les pays sélectionnés.




3. Toujours tester les paramètres reçus



Il est primordial de toujours vérifier les valeurs reçus par un formulaire ! pour éviter les injections (cf google pour plus d’information).

Liste de fonctions utiles pour tester les variables

  • empty()
  • isset()
  • is_numeric()
  • ereg()


N’hésitez pas à allez regarder sur http://www.php.net ou http://www.nexen.net

Exemple de vérification du champ age :
$age = (is_numeric($_POST['age']) && !empty($_POST['age']))?$_POST['age']:'error';

Si age est un chiffre et qu’il n’est pas vide alors on enregistre la valeur sinon on met error.

Equivalent au code, mais qui prend plus de place

if( is_numeric($_POST['age']) && !empty($_POST['age']) ){ $age = $_POST['age']; } else{ $age = 'error'; }

Pour éviter l’erreur dans l’exemple 2-3-4 qui arrive lorsque l’on coche aucune langue on aurait pu mettre :

$tab_lang = (isset($_POST['langue']))?$_POST['langue']:array();

Si la variable $_POST[‘langue’] n’est pas définie on retourne un tableau vide sinon on retourne le bon tableau.



4. Astuce pour débuger un script



Lorsque’il y a une erreur sur le traitement d’un formulaire la première chose à faire est de vérifier qu’il y a bien tous les éléments attendus qui arrivent sur notre page !

Donc je propose un petit bout de code pour afficher toutes les informations, libre à vous de l’enrichir ou de le mettre dans une fonction pour que ce soit plus pratique d’utilisation.

Code à mettre en haut de votre fichier PHP qui est appelé par le formulaire.

//debug code echo 'Var POST : '.count($_POST).'<pre>'; print_r($_POST); echo '</pre>'; echo 'Var GET : '.count($_GET).'<pre>'; print_r($_GET); echo '</pre>'; //fin debug

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.