![]() |
Chaque fois que l'on utilise un moteur de recherche sur le web, des mots-clés sont être transmis au "serveur" (Google ou autre). Le serveur va chercher dans ses bases de données, extraire les url des pages correspondantes, puis transmettre le résultat de ses recherches au butineur "client". Or le protocole support du web, http,
est conçu pour télécharger des pages web depuis un serveur,
les unes après les autres, de façon totalement indépendante,
sans aucun système de liaison. Alors des techniques comme les formulaires (et aussi les cookies, les sessions) sont apparues pour répondre au besoin de
liaisons entre pages web.
Les formulaires sont à la base de l'interactivité des pages web.
Un formulaire, écrit en html, permet l'entrée de données par l'utilisateur.
Ces données sont transmises à un script de traitement (php, cgi...)
ou bien transmises par envoi de courriel.
|
Exemple : le formulaire Formulaire.html, ci contre, permet l'entrée de deux valeurs, un nom et un âge ( exemple ) : En voici le code html : |
|
|
| Ce formulaire étant du code html standard, il peut être facilement créé avec un outil wysiwyg, tel que Kompozer : |
![]() |
La balise html <FORM> a trois attributs principaux :
NAME : le nom de l'objet formulaire ;
ACTION : l'url à activer. A cette url correspond
la page web qui sera exécutée après la validation du formulaire
;
METHOD : GET ou POST ;
GET transmet les paramètres dans l'URL, de façon visible par l'internaute,
POST les transmet de façon cachée, dans les headers de la requête
http.
La balise <INPUT> définit un champ de saisie, qui peut être principalement:
En fait, il parait peu utile de connaître dans le détail le codage html des formulaires, un logiciel de création de pages web comme BlueGriffon ou DreamWeaver faisant cela très bien pour nous...
Lorsque l'attribut "action" d'un formulaire est une url de script
php, cela signifie que le script reçoit les valeurs saisies dans le formulaire. Ainsi le
formulaire décrit au paragraphe précédant <FORM
NAME="saisie" ACTION="TraiteFormulaire.php" METHOD="GET">
transmet au script contenu dans le fichier de nom TraiteFormulaire.php
les valeurs entrées dans les champs "nom" et "age".
Le bouton "OK" du formulaire lance le script, en lui passant
dans l'url les champs du formulaire :
http://.../TraiteFormulaire.php?nom=mathusalem&age=999&OK=OK
Le script php activé par le formulaire Formulaire.html reçoit
les valeurs des paramètres dans des variables $_GET[nom du champ du
formulaire]
Le script de notre exemple TraiteFormulaire.php reçoit les valeurs
$_GET["nom"] et $_GET["age"], puis les affiche :
<?php
$nom = @$_GET["nom"];
$age = @$_GET["age"];
/* on met "@" pour ne pas afficher les éventuels messages d'avertissement dans le cas où le paramètre n'existerait pas */
echo <<<AFFICH
Bonjour $nom<br>
Vous avez $age ans<br><br>
<a href="Formulaire.html">Retour au formulaire</a><br>
AFFICH;
?>
Comment ça marche ? Les URL peuvent contenir, outre le chemin d'accès au fichier contenant la page web, un certain nombre de paramètres situés après le signe "?"

Ce mécanisme de transmission de paramètres entre
pages web est largement exploité. Les moteurs de recherche, comme Google,
l'utilisent intensivement. Voici un exemple (réel) où l'url contient
de nombreux paramètres :
http://www.maporama.fr/share/iti.asp?SESSIONID=%7B5D2104E9-9531-462F-B1CA-9051621C6A96%7D&
ITI_START_COUNTRYCODE=FR&ITI_START_ADDRESS=&ITI_START_ZIPCODE=24170&
ITI_START_STATE=&ITI_START_CITYNAME=PONT-L%27%C9TROIT&ITI_END_COUNTRYCODE=
FR&ITI_END_ADDRESS=&ITI_END_ZIPCODE=91690&ITI_END_STATE=&ITI_END_CITYNAME=
BOISSY-LA-RIVI%C8RE&ITI_MODE=vehicule&ITI_MODE_OPTION_vehicule=Distance&
NumberStepMore=0&SEARCH_ITI2.x=13&SEARCH_ITI2.y=9
Les paramètres sont accessibles par le "tableau
associatif super global" $_GET (pour la méthode GET, ou $_POST pour
la méthode POST).
Le code intégral du script TraiteFormulaire.php est alors :
|
<?php // script_TraiteFormulaire.php //
script php : générer un texte à afficher // générer le pied de page
html |
En résumé, pour envoyer par un formulaire des données à un script PHP, il suffit de mettre le nom du fichier PHP qui réceptionnera les informations en tant que valeur de l'attribut ACTION de la balise FORM.
Rien n'empêche dans un script php de coder directement une
url avec les paramètres requis, sans mettre en oeuvre un formulaire,
comme ceci :
Affichage : Cliquer ici
pour commander.
Code html : Cliquer <a href="http://www.boutique.com?produit=$produit&quantite=$quantite">ici</a>
pour commander.
Les données "forcées" sont alors transmises par
la méthode GET.
La méthode GET transmet les paramètres dans l'url
de façon visible, comme ci-dessus. La méthode POST les transmet
cachés.
De façon générale, que faut-il choisir, GET ou POST ?
POST masquant les paramètres est préférable,
les risques de piratage s'en trouveront un peu réduits.
NB : Les valeurs de paramètres doivent être codées, comme
dans toute URL : pas d'espace, ni de lettre accentuée, etc. Les caractères
dans une url peuvent être les caractères alphabétiques (a-Z;A-Z)
et numériques (0-9), ainsi que les caractères "_" et
"-", tandis que le caractère espace doit être remplacé
par plus "+". Les autres caractères doivent être codés
par le signe % suivi du code hexadécimal du caractère... La fonction
urlencode() code ainsi les paramètres pour les transmettre, la
fonction urldecode() les décode.
Plutôt que de séparer le formulaire de son traitement, en deux
page web, il est recommandé pour simplifier la programmation de les placer
dans le même script. La variable globale PHP_SELF contient le nom du fichier en cours d'exécution, la ligne html d'en-tête du formulaure pourra alors s'écrire de façon générale :
<form action="$_SERVER['PHP_SELF'] method="POST" enctype="multipart/form-data">
Voici un exemple de script "forme.php" :
|
NB : l'attribut value de la balise <input> indique une valeur initiale, affichée par défaut.
Si ce script est dans le fichier "forme.php", l'action demandée
par le formulaire est l'exécution à nouveau du même script :
"forme.php". Au premier appel du script, la variable $z6 n'étant
pas définie, la valeur initiale du champ est nulle, au second appel du
script, invoqué par le formulaire, la variable $z6 prend la valeur entrée
dans le formulaire.
Cette façon de procéder
- permet d'éviter d'avoir une multitude de fichiers dans un projet php,
- n'oblige plus l'utilisateur à cliquer sur le bouton Précédent
du butineur pour revoir le formulaire,
- n'oblige plus l'utilisateur à resaisir toutes les valeurs en cas d'erreur
dans un champ,
- facilite l'affichage de messages d'erreur adaptés aux champs erronés,
préremplis,
- simplifie le traitement des valeurs par défaut des champs puisque le
formulaire et le script de traitement se trouvent dans la même page php.
De façon plus générique, la forme normale php peut se décrire par :
|
Exemple : http://www.mines.inpl-nancy.fr/~tisseran/cours/php/tdphp2/nom_age.php contient le code
|
<html> if
($nom == "") { // le nom n'a pas encore été
entré : afficher le formulaire |
PHP admet plusieurs façons de manipuler les tableaux, principalement la forme indexée et la forme associative.
La forme indexée est assez semblable à celle d'autres
langages, Java ou C :
$jour = array
("lundi", "mardi", "mercredi", "jeudi",
"vendredi", "samedi", "dimanche") ;
for ( $i=0; $i<sizeof($jour); $i++ ) {
echo "$i : $jour[$i]<br>\n";
}
Il y a une écriture plus compacte pour parcourir le tableau, avec l'instruction
foreach (foreach passe en renue le tableau : à chaque itération
la valeur de l'élément courant est assignée à $v ;
à l'itération suivante on accéde à l'élément
suivant ; au lancement des itérations le premier élément
est sélectionné) :
| foreach
( $jour as $v ) { echo "$v<br>\n"; // l'élément courant } |
foreach
( $jour as $k => $v ) { echo "$k : $v<br>\n"; // la clé de l'élément courant } |
La forme associative permet une écriture plus naturelle :
$unite = array
( "pommes" => "kilo", "RAM" => "Mo",
"galaxies" => "parsec", "livre" => "pages",
"reseau" => "Mbps", "Mineur" => "kro"
) ;
foreach ( $unite as $i => $v) {
echo "$i : $v<br>\n";
}
Citons encore une façon de parcourir les tableaux en utilisant un curseur,
positionné sur le premier élément et incrémenté
par la fonction each(). Cette fonction each() retourne une liste de deux
valeurs, la paire (clé, résultat). Par exemple :
$unite = array
( "pommes" => "kilo", "RAM" => "Mo",
"galaxies" => "parsec", "livre" => "pages",
"reseau" => "Mbps", "Mineur" => "kro"
) ;
reset($unite);
while ( list($i, $v) = each($unite) ) {
echo "$i : $v<br>\n";
}
Remarquons alors que les exemples fonctionnent de manière identique à ceux utilisant foreach :
| reset($jour); while (list(, $v) = each ($jour)) { echo "$v<br>\n"; } |
reset($jour); while (list($k, $v) = each ($jour)) { echo "$k: $v<br>\n"; } |
Enfin, signalons que PHP propose des fonctions de tri sur les tableaux, qu'ils
soient indexés ou associatifs.
| void asort (array tab) | Tri d'un tableau associatif en ordre croissant | void sort (array tab) | Tri d'un tableau en ordre croissant | |
| void arsort (array tab) | Tri d'un tableau associatif en ordre croissant | void rsort (array tab) | Tri d'un tableau en ordre décroissant | |
| void ksort (array tab) | Tri d'un tableau associatif dans l'ordre croissant des clés | void shuffle (array tab) | Mélange aléatoire des élements d'un tableau | |
| void krsort (array tab) | Tri d'un tableau associatif dans l'ordre décroissant des clés | void usort (array tab) | Tri d'un tableau dans l'ordre fixé par la fonction cmp | |
| void uasort (array tab, function cmp) | Tri d'un tableau associatif dans l'ordre fixé par la fonction cmp | void uksort (array tab) | Tri d'un tableau dans l'ordre des clés fixé par la fonction cmp |
5ème exercice : Créer un script php
de traitement de formulaire
Dans un fichier convertisseur.php, écrire et tester un script
de conversion euros-dollars.
On pourra s'inspirer des lignes suivantes :
|
<?php |
Corrigé
:
convertisseur
6ème
exercice : Dans l'exercice 4, des valeurs issues de la saisie dans un formulaire ont été transmises à un script php (voir le script).
- Modifier le script pour que votre nom soit proposé par défaut.
Corrigé
:
- inscription
- paramètres dans l'url :
http://www.mines.inpl-nancy.fr/~tisseran/cours/php/tdphp2/inscription.php?
nom=mathusalem&age=999&courriel=mathusalem%40mafia.org&Submit=Envoyer
- code source
inscription.php
8ème
exercice : Dans le script de l'exercice précédant, inscription.php, vérifier que les coordonnées du visiteur âge et adresse de
courriel sont plausibles (âge : entier positif, inférieur à 123, courriel : de la forme chaine@chaine.chaine), refuser la saisie si les données ne sont pas valides.
Corrigé
: inscription avec vérification
+ code source
Suite : valider les données - les expressions régulières
Alain
Tisserant
Document : http://www.mines.inpl-nancy.fr/alain.tisserant/cours/php/php2.html
Dernière mise à jour : octobre 2011
Remarques, suggestions, questions, ... : ![]()