La communauté ALL HTML c'est 60191 membres à ce jour dont 0 inscrits aujourd'hui et 14 depuis une semaine.

Gestion des variables de formulaire

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. <br /> 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


VOS COMMENTAIRES ...

Commenter cette publication

Photo de doula Commentaire publié le mercredi 19 juillet 2006 à 14 h 06 par doula
Article assez interessant pour les débutants en php. Il est clair et bien expliqué... dommage qu'on ne voit pas le code dans les petites fenetres !
Le MUST serait de donner un indice de difficulté des articles (ou tutoriaux).
Bravo encore !
Photo de gaeil Commentaire publié le samedi 02 septembre 2006 à 17 h 15 par gaeil
ça à l'air pas mal...mon problème si situe maintenant sur la suite. Je dois récupérer uen adresse mail pour l'envoyer vers une base SQL. Je dois
composer l'adresse d'inscription ou désinscription et l'envoyer.
Pour inscrire (par exemple) l'adresse toto@domaine.com il faut envoyer la requête à : nommailing-subscribe-toto=domaine.com@domaine ( le @ après toto doit être remplacé par = )

concrètement en langage PHP ça donnerait quoi, après avoir créé un formulaire simplecomme indiqué ci-dessus ?
merci
Photo de moldave Commentaire publié le lundi 28 juillet 2008 à 03 h 37 par moldave
Super intéressant ton exposé mais j'ai deux questions complémentaires :

- Comment faire pour que le formulaire et le traitement PHP soit dans le même fichier ?
- Comment revenir automatiquement au formulaire de départ lorsque la sauvegarde dans la table est terminée ?

Merci de tes explications.
M. le mot dit
Photo de telnes Commentaire publié le lundi 28 juillet 2008 à 13 h 00 par telnes
hello

dans le champs action de ton form tu met l'url de ta page qui contient le formulaire

monForm.php


<form action="monForm.php" method="GET">
<input type="text" name="chp1" value="test">
<input type="submit" value="envoyer">
</form>


comme ca les actions valeurs sont envoyé à la page en cour (il y a la variable $_SERVER["PHP_SELF"] qui revoit l'url pour info )

Ensuite en haut de ta page monForm.php tu met du code PHP pour traiter les variables qui arrive sur la page


<?php

if(isset($_GET['chp1'])){ echo 'je traite les datas';}

?>


voila le principe

++
Photo de Akharawaka Commentaire publié le mardi 02 décembre 2008 à 14 h 42 par Akharawaka
Impeccable pour afficher le contenu du tableau HTML, mais par contre, pour récupérer ces données par e-mail, je me heurte à un problème : je ne reçois dans le corps du mail que la dernière valeur au lieu de l'ensemble des valeurs...

Mon code :

<?php

$formNom = $_POST['nom'];
$formPrenom = $_POST['prenom'];
$formMail = $_POST['mail'];
$formMessage = $_POST['message'];
if (isset($_POST['interet']))
{
$tab_interet = $_POST['interet'];
}

foreach($tab_interet as $infos)
{
}

$to = 'test@test.fr';
$subject = 'Demande d\'informations via le site Le19';
$message = "$formNom $formPrenom vous contacte via le formulaire du site Le19.\n \n Message : \n $formMessage \n \n E-mail : $formMail \n \n Interesse par : $infos ";


if( mail($to, $subject, $message) )

?>

Commenter cette publication

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

Forums de discussions associés

Discutez et échangez sur ce thème dans notre forum PHP - SQL.

Liens sponsorisés

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é.