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