Utilisations pratiques de Php 1. Traitement des formulaires

Transcription

Utilisations pratiques de Php 1. Traitement des formulaires
Php intermédiaire
Utilisations pratiques de Php
UTILISATIONS PRATIQUES DE PHP
1.
TRAITEMENT DES FORMULAIRES
1.1.
1.2.
2.
LISTE DES DONNÉES DE FORMULAIRE
ENREGISTREMENT DES DONNÉES DE FORMULAIRE DANS UN FICHIER
UTILISATION D'UNE BASE DE DONNÉES SIMPLE
2.1.
2.2.
MANIPULATION DE LA BASE DE DONNÉES
LECTURE DE LA BASE DE DONNÉES
3. UTILISATION DE CONTRÔLES CACHÉS POUR MAINTENIR DES DONNÉES
D'ÉTATS
3.1.
4.
UTILISATION DE PHP POUR MANIPULER UN COOKIE
4.1.
4.2.
5.
CONTRÔLES CACHÉES POUR REPRÉSENTER L'ÉTAT DE L'APPLICATION
FONCTIONNEMENT D'UN COOKIE
EXEMPLE D'UTILISATION D'UN COOKIE
UTILISATION DE SESSION POUR MAINTENIR DES DONNÉES D'ÉTATS
1. Traitement des formulaires
Le lien entre un contrôle du formulaire et le script php se fait par l'intermédiaire de l'attribut
name des contrôles XHTML. Pour chaque valeur de l'attribut name d'un contrôle du formulaire,
php crée une entrée dans le tableau associatif $_GET (ou $_POST) du même nom. Les valeurs
dans le tableau sont indexées par le nom des contrôles.
On peut savoir si la méthode d'envoi d'un formulaire est GET ou POST en consultant les
variables d'environnement. En Php, les variables d'environnement sont dans le tableau
associatif $_ENV indexé par les noms des variables d'environnement. L'entrée
$_ENV["REQUEST_METHOD"] vaut POST ou GET.
<input type="text" name="prenom" id="prenom" size="30" /> va donner lieu à la
variable $_GET["prenom"] si le formulaire a été envoyé avec la méthode get.
•
Le script suivant, qui traite le formulaire contenant des contrôles pour le nom, prénom et
adresse électronique, va simplement afficher la valeur de chaque contrôle.
<?php
echo "Prénom: ".$_GET["prenom"] ."<br />";
echo "Nom: ". $_GET["nom"]." <br />";
echo "Adresse électronique: ".$_GET["adresse"]." <br />";
?>
©2008 Hélène Desaulniers
1
Php intermédiaire
•
Voir http://linux04.uqtr.ca/~helene/Formulaire/formulaire3Input.xhtml
1.1.
Liste des données de formulaire
•
Dans l'exemple précédent, l'application qui traite le formulaire est testFormulaire1.php.
Dans ce document on utilise les noms des différents contrôles: nom, prenom, email pour
accéder aux valeurs de ces contrôles.
o $_GET["nom"]
•
Dans le cas général, l'application qui traite le formulaire ne connaît pas les noms des
différents contrôles. Ce sont des tableaux $_GET et $_POST, intégrés à Php qui contiennent
les noms et valeurs des différents contrôles.
Puisque $_GET et $_POST sont des tableaux indexés par les noms des contrôles, il est
possible de parcourir le tableau avec une boucle foreach et de traiter chaque paire nom,
valeur
L'application testFormulaire2.php afficher toutes les paires (nom, valeur) du formulaire:
•
•
<?php
foreach ($_GET as $nom=>$valeur){
print "$nom = $valeur <br />";
}
?>
•
Remarquez la notation =>. C'est ce qui permet de définir un couple (clé, valeur). Par
exemple, on peut entrer des données dans un tableau:
•
Dans une boucle foreach qui parcourt un tableau on peut de la sorte aller chercher la clé et
la valeur de chaque couple.
Vous pouvez l'essayer avec
http://linux04.uqtr.ca/~helene/Formulaire/formulaire3InputListe.xhtml
o
•
$prix = array("small"=>6.99, "medium"=>8.69, "large"=> 12.50)
1.2.
Enregistrement des données de formulaire dans un
fichier
•
•
•
Habituellement les données de formulaires sont conservées dans une base de données pour
traitement futur.
Pour simplifier, nous allons simplement mémoriser les données dans un fichier.
Ouverture du fichier avec la permission a pour ajout (append). On veut ajouter les
coordonnées à la fin du fichier.
<?php
$nomFichier = "/home/helene/public_html/Php/listeAdresse.txt";
if (file_exists($nomFichier)){
$fichier = fopen ($nomFichier, "a");
}else{$fichier = fopen($nomFichier, "x");}
©2008 Hélène Desaulniers
2
Php intermédiaire
$ligne =$_GET["prenom"].",". $_GET["nom"].",". $_GET["adresse"]."\n";
fputs($fichier, $ligne);
fclose($fichier);
?>
•
•
Voir http://linux04.uqtr.ca/~helene/Formulaire/formulaire3InputFichier.xhtml
Pour voir le contenu du fichier:
<?php
$nomFichier = "/home/helene/public_html/Php/listeAdresse.txt";
if (file_exists($nomFichier)){
$fichier = fopen ($nomFichier, "r");
while (!feof ($fichier)) {
$ligne = fgets ($fichier);
echo "$ligne <br />";
}
fclose($fichier);
}else{
echo "Impossible de lire la page. \n";
exit;
}
?>
•
Voir: http://linux04.uqtr.ca/~helene/Php/testFichierAdr.php
2. Utilisation d'une base de données simple
Il existe dans Php une interface notée DBA (pour Database abstraction) qui permet de définir et
d'utiliser une base de données non relationnelle. (Celui qui voudrait travailler avec des bases
de données relationnelles devra utiliser un système de gestion de bases de données
propriétaire.)
Une façon simple de savoir si votre serveur vous donne accès à DBA est d'utiliser la fonction
phpinfo.
•
•
La fonction phpinfo() donne des informations sur l'environnement de php
Utile à l'étape du développement parce qu'elle nous donne aussi les valeurs des différentes
variables d'environnement.
o Voir http://linux04.uqtr.ca/~helene/Php/infoPhp.php
Dans une base de données non relationnelle les données (enregistrements) sont simplement
formées d'une paire (clé, valeur). La clé est un identifiant pour l'enregistrement et les autres
informations concernant l'enregistrement sont dans la valeur.
Par exemple si on avait à garder dans une base de données les coordonnées entrées dans le
formulaire précédent, on aurait
• une clé qui serait formée de la concaténation du prénom et du nom
• une valeur qui est l'adresse électronique.
Consultez le site http://ca3.php.net/manual/fr/ref.dba.php pour en savoir plus.
L'avantage de cette interface est qu'elle est intégrée à Php.
©2008 Hélène Desaulniers
3
Php intermédiaire
2.1.
Manipulation de la base de données
Il est essentiel de créer d'abord la base de données:
<?php
if (dba_open("coordonnees.db", "n", "db4")){echo "Base de données crée"; }
else{echo "Base de données non crée";}
?>
•
•
La fonction dba_open() prend en paramètres:
o Le nom de la base de données (ici coordonnees.db)
o Le mode d'ouverture (r pour read, n pour nouvelle, w pour write)
o Le nom du gestionnaire de la base de données (ici db4)
La fonction retourne une ressource qui représente la base de données ouverte si elle a réussi
à ouvrir la base de données, sinon elle retourne faux.
Une fois que la base de données est ouverte, il sera possible d'y ajouter de l'information et
d'accéder à ces informations.
<?php
$maBase = dba_open("coordonnees.db", "w", "db4");
if (!$maBase){echo "La base de données n'a pas pu être ouverte";
}else{
if (dba_exists($_GET["prenom"] ." " .$_GET["nom"] ,$maBase)){
print "<p>Cet utilisateur est déjà dans la base de données </p>";
}else{
dba_insert($_GET["prenom"] ." " .$_GET["nom"],$_GET["adresse"],
$maBase);
}
}
dba_close($maBase)
?>
•
•
•
La fonction dba_exists() vérifie si un enregistrement avec une clé donnée existe déjà
dans la base de données. C'est important de faire la vérification parce que l'insertion va
échouer si il y a déjà un enregistrement avec la clé.
La fonction dba_insert() permet d'insérer des données dans la base de données. Prend 3
paramètres
o La clé de l'élément à insérer
o La valeur
o La base de données (ici coordonnees.db)
Voir http://linux04.uqtr.ca/~helene/Formulaire/formulaire3InputBD.xhtml
2.2.
Lecture de la base de données
<?php
$maBase = dba_open("coordonnees.db", "r", "db4");
if (!$maBase){echo "La base de données n'a pas pu être ouverte";
}else{
$cle = dba_firstkey($maBase);
©2008 Hélène Desaulniers
4
Php intermédiaire
while ($cle != false){
$valeur = dba_fetch($cle, $maBase);
print $cle ." " . $valeur ."<br /> \n";
$cle = dba_nextkey($maBase);
}
}
dba_close($maBase)
?>
Pour lire les données dans une base de données, il suffit de parcourir tous les enregistrements
de la base de données.
• Pour accéder à un enregistrement, on utilise la fonction dba_fetch() en fournissant la
clé de l'enregistrement.
•
•
Pour accéder aux clés de la base de données, on utilise dba_firstkey() pour le
première clé puis dba_nextkey() pour les clés suivantes.
Voir http://linux04.uqtr.ca/~helene/Php/lireBD.php
3. Utilisation de contrôles cachés pour maintenir des
données d'états
Vous savez peut-être déjà que le protocole http est un protocole "stateless" c'est-à-dire que
chaque requête est indépendante des requêtes précédentes ou futures.
Des données d'états sont des données qui sont conservées de requête en requête. On peut bien
sûr stocker ces données dans un fichier ou dans une base de données mais dans certains cas il
n'est pas nécessaire de mémoriser indéfiniment les données, il suffit de les mémoriser
seulement le temps de quelques requêtes. L'exemple classique est celui du panier d'achat: il est
nécessaire de mémoriser les biens qu'un client met dans le panier d'achat tout au cours de la
visite sur le site.
On appelle une session de navigation la période de temps entre le temps où on visite une
première page d'un site et le temps où on quitte le site.
Supposons que vous avez un formulaire qui est trop long pour tenir en une page: l'usager va
remplir les contrôles du formulaire sur plusieurs pages. Au moment où le formulaire est
soumis pour traitement, il faut avoir mémorisé les données entrées dans la première partie du
formulaire pour envoyer l'ensemble des données au serveur.
©2008 Hélène Desaulniers
5
Php intermédiaire
Figure 1: Diagramme de transition
La solution est de faire passer ces données d'une page à une autre au moyen de contrôles
cachés.
Voici le formulaire qui correspond à la première partie du questionnaire:
<form action="http://linux04.uqtr.ca/~helene/Php/suiteForm.php" method="get" >
<h2>Coordonnées</h2>
<p>
<label for="prenom">Prénom </label>
<input type="text" name="prenom" id="prenom" size="30" />
<br />
<label for="nom">Nom </label>
<input type="text" name="nom" id="nom" size="30" />
<br />
<label for="adresse">Courriel </label>
<input type="text" name="adresse" id="adresse" size="50" />
</p>
<p><input type ="submit" value="Page suivante" /><input type="reset"
value="remettre à zéro" /></p>
</form>
Voir http://linux04.uqtr.ca/~helene/Php/formP1.xhtml
Le programme suiteForm.php va afficher le formulaire qui correspond à la deuxième partie
du questionnaire mais il va aussi construire des contrôles cachés pour les données qu'il a
reçues.
<form action="http://linux04.uqtr.ca/~helene/Php/traiteFormulaireListe.php"
method="get">
<p>
©2008 Hélène Desaulniers
6
Php intermédiaire
<?php
foreach ($_GET as $nom=>$valeur){
print "<input type=\"hidden\" name=\"$nom\" value=\"$valeur\" />\n ";
}
?>
Niveau de connaissances en informatique:
<select name="profil" id="profil">
<option>simple utilisateur</option>
<option>utilisateur expérimenté</option>
<option>programmeur amateur</option>
<option>programmeur professionnel</option>
<option>passionné d'informatique</option>
<option>expert</option>
</select>
<br />
Navigateur(s) utilisé(s):
<label for="IE6">Internet Explorer</label>
<input type="checkbox" name="IE6" id="IE6"/>
<label for="NN7">Netscape</label>
<input type="checkbox" name="NN7" id="NN7"/>
<label for="Moz">Mozilla </label>
<input type="checkbox" name="MOZ" id="Moz"/>
<label for="Fox">Firefox </label>
<input type="checkbox" name="FOX" id="Fox"/>
<br />
<label for="autre">Autre</label>
<input type="text" size="30" id="autre" name="AutreNavigateur" />
<br />
<input type ="submit" value="Envoyer" /><input type="reset" value="remettre à
zéro" />
</p>
</form>
3.1.
Contrôles cachées pour représenter l'état de l'application
Ici on considère que l'ensemble des formulaires nécessaires à la cueillette d'information
constitue une seule application.
C'est l'application qui va déduire dans quel état elle se trouve en lisant les données de $_GET.
Ça suppose un contrôle caché pour maintenir cette information.
Il suffit de modifier l'affichage du premier formulaire pour introduire un contrôle caché du nom
de requête qui prendra la valeur afficheP2.
<input type="hidden" name="requete" value="afficheP2" />
L'application va vérifier si ce contrôle a une valeur et appeler la bonne fonction:
if (!isset($_GET["requete"])){
afficheP1();
}else if ($_GET["requete"] == "afficheP2"){
afficheP2();
}else{
©2008 Hélène Desaulniers
7
Php intermédiaire
afficheP1();
}
La particularité d'une telle application c'est que la même application affiche et traite le premier
formulaire. En php on a la variable $PHP_SELF qui contient l'URL de l'application. Elle permet
donc de lier un script php avec lui-même.
<?php
header('Content-type: application/xhtml+xml; charset=UTF-8');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>
<meta name="Author" content="Hélène Desaulniers"/>
<title>Évaluation du site </title>
<link rel="stylesheet" type="text/css" href="styleForm2.css" />
</head>
<body>
<h1>Évaluation du site</h1>
<?php
if (!isset($_GET["requete"])){
afficheP1();
}else if ($_GET["requete"] == "afficheP2"){
afficheP2();
}else{
afficheP1();
}
?>
<p class="pied">Auteur: Hélène Desaulniers </p>
</body>
</html>
<?php
function afficheP1(){
print <<<FINFORMP1
<form action="$PHP_SELF" method="get">
<h2>Coordonnées</h2>
<p>
<label class="gauche" for="prenom">Prénom </label>
<input type="text" name="prenom" id="prenom" size="30" />
<br />
<label class="gauche" for="nom">Nom </label>
<input type="text" name="nom" id="nom" size="30" />
<br />
<label class="gauche" for="adresse">Courriel </label>
<input type="text" name="adresse" id="adresse" size="50" />
</p>
<p>
<input type="hidden" name="requete" value="afficheP2" />
<input type ="submit" value="Page suivante" /><input type="reset"
value="remettre à zéro" /></p>
</form>
FINFORMP1;
}
function afficheP2(){
print <<<FINFORMP2HAUT
<h2>Profil</h2>
<form action="http://linux04.uqtr.ca/~helene/Php/traiteFormulaireListe.php"
method="get">
<p>
FINFORMP2HAUT;
foreach ($_GET as $nom=>$valeur){
print "<input type=\"hidden\" name=\"$nom\" value=\"$valeur\" />\n ";
©2008 Hélène Desaulniers
8
Php intermédiaire
}
print <<<FINFORMP2BAS
Niveau de connaissances en informatique:
<select name="profil" id="profil">
<option>simple utilisateur</option>
<option>utilisateur expérimenté</option>
<option>programmeur amateur</option>
<option>programmeur professionnel</option>
<option>passionné d'informatique</option>
<option>expert</option>
</select>
<br />
Navigateur(s) utilisé(s):
<label for="IE6">Internet Explorer</label>
<input type="checkbox" name="IE6" id="IE6"/>
<label for="NN7">Netscape</label>
<input type="checkbox" name="NN7" id="NN7"/>
<label for="Moz">Mozilla </label>
<input type="checkbox" name="MOZ" id="Moz"/>
<label for="Fox">Firefox </label>
<input type="checkbox" name="FOX" id="Fox"/>
<br />
<label for="autre">Autre</label>
<input type="text" size="30" id="autre" name="AutreNavigateur" />
<br />
<input type ="submit" value="Envoyer" /><input type="reset" value="remettre à
zéro" />
</p>
</form>
FINFORMP2BAS;
}
?>
©2008 Hélène Desaulniers
9
Php intermédiaire
4. Utilisation de php pour manipuler un cookie
Un cookie est un fichier texte sur l'ordinateur client. Le cookie est écrit au moment où le client
visite un site qui écrit le cookie. Quand le client revient sur ce site, le cookie peut-être lu et
utilisé.
4.1.
Fonctionnement d'un cookie
Le client accède à une application Web qui utilise un cookie
L'application Web demande au navigateur d'inscrire de l'information dans le cookie.
Le navigateur inscrit cette information accompagnée du nom du domaine de l'application qui
utilise le cookie.
Chaque fois que le navigateur accède à ce domaine, il envoie le cookie correspondant
•
•
•
Selon le navigateur tous les cookies peuvent être mémorisés
o dans un même fichier (pour FireFox)
o dans des fichiers distincts dans un même répertoire (pour IE)
Certains cookies sont non persistants (durent le temps de la session de navigation) tandis
que d'autres sont persistants et dure jusqu'à une date d'expiration.
Les navigateurs ont généralement des limites sur les cookies:
o limite dans le nombre de cookies pour un même domaine,
o limite dans le nombre total de cookies,
o limite sur la taille d'un cookie.
Il faut bien garder à l'esprit qu'il est possible que le client n'accepte pas de cookies. C'est
pourquoi le site doit être fonctionnel sans les cookies. On utilise habituellement les cookies
pour stocker les préférences de l'utilisateur. Par exemple, une application pourrait demander à
un usager d'entrer la langue dans laquelle il souhaite communiquer.
4.2.
Exemple d'utilisation d'un cookie
L'idée est de sauvegarder la langue de préférence de l'usager. Un cookie est essentiellement
une paire (nom; valeur). En Php, on accède à un cookie avec le tableau associatif $_COOKIE.
L'application vérifie si il existe déjà un cookie spécifiant la langue de préférence. De plus
comme la même application affiche également le formulaire permettant à l'usager d'indiquer sa
préférence, on vérifie également si le contrôle correspondant à la langue est présent:
<?php
if (isset($_COOKIE["langage"]) || isset($_GET["choixLangue"])){
afficheContenu();
}else{
afficheForm();
}
©2008 Hélène Desaulniers
10
Php intermédiaire
Dans la fonction afficheContenu() on prendra soin de mémoriser le choix de l'usager en
l'écrivant dans le cookie.
C'est la fonction setcookie() qui permet d'inscrire un cookie. Le seul argument obligatoire
est le nom du cookie. Si on veut un cookie permanent, on indique la date d'expiration du
cookie. Pour donner une durée de vie de 1 an au cookie on ajoute à l'heure actuelle le nombre
de secondes dans un an.
if (isset($_GET["choixLangue"])){ #Écrire le cookie
$langue = $_GET["choixLangue"];
setcookie("langage", $langue, time()+ 3600*24*365, "/");
}else{
$langue = $_COOKIE["langage"];
}
La gestion des cookies est faite par le protocole http. Entre autres dans le cas où on écrit un
cookie, les données du cookie seront ajoutées à l'entête de la requête http. C'est pourquoi un
appel à setcookie() doit nécessairement précéder tout affichage de texte.
<?php
if (isset($_COOKIE["langage"]) || isset($_GET["choixLangue"])){
afficheContenu();
}else{
afficheForm();
}
function afficheForm(){
header('Content-type: application/xhtml+xml; charset=UTF-8');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print <<<LEFORM
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>
<meta name="Author" content="Hélène Desaulniers"/>
<title>Accueil</title>
</head>
<body>
<h1>Bienvenue -- Welcome</h1>
<form action="$PHP_SELF" method="get">
<p>Indiquez la langue de votre choix -Choose the language
<label><input type="radio" checked="checked" name="choixLangue"
value="F"/>Français</label>
<label><input type="radio" name="choixLangue" value="A" />English</label><br />
<input type="submit" value="Donner mes préférences" />
</p></form>
</body>
</html>
LEFORM;
}
function afficheContenu(){
if (isset($_GET["choixLangue"])){ #Écrire le cookie
$langue = $_GET["choixLangue"];
setcookie("langage", $langue, time()+ 3600*24*365, "/");
}else{
$langue = $_COOKIE["langage"];
}
©2008 Hélène Desaulniers
11
Php intermédiaire
header('Content-type: application/xhtml+xml; charset=UTF-8');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print <<<FINDEBUT
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>
<meta name="Author" content="Hélène Desaulniers" />
FINDEBUT;
if ($langue=="F"){
print <<<FINF
<title>Bienvenue</title>
</head>
<body>
<h1>Bienvenue</h1>
<p>Suite du texte en français</p>
FINF;
}else{
print <<<FINA
<title>Welcome</title>
</head>
<body>
<h1>Welcome</h1>
<p>Other text in english</p>
FINA;
}
print <<<FINBAS
</body>
</html>
FINBAS;
}
?>
5. Utilisation de session pour maintenir des données d'états
L'utilisation des contrôles cachés pour les données d'état peut présenter un problème quand il y
en a plusieurs (mauvaise utilisation de la bande passante). De plus les contrôles cachés ne
permettent pas de mémoriser des données complexes. La solution est d'utiliser des variables de
session qui sont accessibles au moyen de la liste $_SESSION. Les données sont mémorisées
dans un fichier sur le serveur.
Chaque session comporte un identifiant unique de sorte qu'un usager a en principe accès
uniquement aux données de SA session. Toutefois des données sensibles devraient être
protégées mieux que par un identificateur de session parce cet identifiant pourrait être
intercepté. Cet aspect de la sécurité des données de session n'est pas abordé ici.
Dans l'exemple du questionnaire en 2 parties, les sessions seront utilisées à la fois pour
mémoriser l'état de l'application et pour les données du premier formulaire. Plutôt que de
mémoriser les données du premier formulaire dans des contrôles cachés, elles seront
simplement mémorisées dans des variables de session:
$_SESSION["prenom"] = $_GET["prenom"];
La fonction session_start() vérifie si une session existe déjà et la crée sinon. On doit
utiliser cette fonction avant d'utiliser les sessions.
©2008 Hélène Desaulniers
12
Php intermédiaire
<?php
if (!isset($_SESSION["etat"])){
$_SESSION["etat"] = "afficheP2";
afficheP1();
}else{
unset($_SESSION["etat"]);
$_SESSION["prenom"] = $_GET["prenom"];
$_SESSION["nom"] = $_GET["nom"];
$_SESSION["adresse"] = $_GET["adresse"];
afficheP2();
}
?>
Le traitement du formulaire sera adapté à l'application pour lire une partie des données dans la
liste $_SESSION et l'autre partie dans la liste $_GET.
print "Prénom = " .$_SESSION["prenom"] ."<br />";
print "Nom = ". $_SESSION["nom"]." <br />";
print "Adresse électronique = ".$_SESSION["adresse"]." <br />";
foreach ($_GET as $nom=>$valeur){
print "$nom = $valeur <br />";
}
Essayez http://linux04.uqtr.ca/~helene/Php/formEn2PartSession.php
Voici le document formEn2PartSession.php complet:
<?php
session_start();
header('Content-type: application/xhtml+xml; charset=UTF-8');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>
<meta name="Author" content="Hélène Desaulniers"/>
<title>Évaluation du site </title>
<link rel="stylesheet" type="text/css" href="styleForm2.css" />
</head>
<body>
<h1>Évaluation du site</h1>
<?php
if (!isset($_SESSION["etat"])){
$_SESSION["etat"] = "afficheP2";
afficheP1();
}else{
unset($_SESSION["etat"]);
$_SESSION["prenom"] = $_GET["prenom"];
$_SESSION["nom"] = $_GET["nom"];
$_SESSION["adresse"] = $_GET["adresse"];
afficheP2();
}
?>
<p class="pied">Auteur: Hélène Desaulniers </p>
</body>
</html>
<?php
function afficheP1(){
print <<<FINFORMP1
©2008 Hélène Desaulniers
13
Php intermédiaire
<form action="$PHP_SELF" method="get">
<h2>Coordonnées</h2>
<p>
<label class="gauche" for="prenom">Prénom </label>
<input type="text" name="prenom" id="prenom" size="30" />
<br />
<label class="gauche" for="nom">Nom </label>
<input type="text" name="nom" id="nom" size="30" />
<br />
<label class="gauche" for="adresse">Courriel </label>
<input type="text" name="adresse" id="adresse" size="50" />
</p>
<p>
<input type ="submit" value="Page suivante" /><input type="reset"
value="remettre à zéro" /></p>
</form>
FINFORMP1;
}
function afficheP2(){
print <<<FINFORMP2
<h2>Profil</h2>
<form action="traiteFormSession.php" method="get">
<p>
Niveau de connaissances en informatique:
<select name="profil" id="profil">
<option>simple utilisateur</option>
<option>utilisateur expérimenté</option>
<option>programmeur amateur</option>
<option>programmeur professionnel</option>
<option>passionné d'informatique</option>
<option>expert</option>
</select>
<br />
Navigateur(s) utilisé(s):
<label for="IE6">Internet Explorer</label>
<input type="checkbox" name="IE6" id="IE6"/>
<label for="NN7">Netscape</label>
<input type="checkbox" name="NN7" id="NN7"/>
<label for="Moz">Mozilla </label>
<input type="checkbox" name="MOZ" id="Moz"/>
<label for="Fox">Firefox </label>
<input type="checkbox" name="FOX" id="Fox"/>
<br />
<label for="autre">Autre</label>
<input type="text" size="30" id="autre" name="AutreNavigateur" />
<br />
<input type ="submit" value="Envoyer" /><input type="reset" value="remettre à
zéro" />
</p>
</form>
FINFORMP2;
}
?>
Et voici le document traiteFormSession.php qui traite le formulaire:
<?php
session_start();
header('Content-type: application/xhtml+xml; charset=UTF-8');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>
<title>Résultats</title>
<link rel="stylesheet" type="text/css" href="styleForm2.css" />
</head>
©2008 Hélène Desaulniers
14
Php intermédiaire
<body>
<h1>Résultats</h1>
<p>
<?php
print "Prénom = " .$_SESSION["prenom"] ."<br />";
print "Nom = ". $_SESSION["nom"]." <br />";
print "Adresse électronique = ".$_SESSION["adresse"]." <br />";
foreach ($_GET as $nom=>$valeur){
print "$nom = $valeur <br />";
}
?>
</p>
<p class="pied">Auteur: Hélène Desaulniers </p>
</body>
</html>
©2008 Hélène Desaulniers
15