Title: Systme de veille Internet au CNRS
1Cette présentation ainsi que les exemples de code
sont disponibles à http//ecoles.in2p3.fr Il
nest pas conseillé de limprimer en raison des
animations utilisant plusieurs couches d'objets
2Construire des applications Web initiation à
PHP, MySQL, JavaScript
Daniel.Charnay_at_in2p3.fr
3HTML et HTML dynamique, rappels
4Le modèle HTML statique
Serveur WEB
htdocs
Fichier hello.html
Internet
5Le modèle HTML dynamique avec les CGI
execution
hello.c
compilation
6Le modèle HTML dynamique avec un interpréteur
Internet
Interprêteur
7Présentation de lapplication Web
8Fonctionnellement une application Web cest
- Un formulaire inséré dans une page Web et
permettant à un utilisateur de transmettre des
données, de déposer une demande - Un serveur traitant cette demande et envoyant une
réponse, un accusé de réception - Exemples
- Les réservations de la SNCF
- La gestion de compte bancaire à la BNP
- Le formulaire de déclaration dimpôts du
Ministère des Finances - Lannuaire de lIN2P3
- Etc.
9Techniquement une application Web cest
- Une page Web contenant un formulaire HTML envoyé
au client - Du code autonome sexécutant sur un serveur
HTTP - Le programme est auto suffisant, il calcule par
exemple la racine carrée dun nombre - Ou du code sexécutant sur un serveur HTTP et
accèdant à des services non Web - Accès à des bases de données
- Accès à des serveurs LDAP
- Mais peut être aussi du code sexécutant dans
le navigateur - Validation, vérification des saisies
- Ergonomie du formulaire
10Une application Web nécessite donc
- Obligatoirement un serveur HTTP !
- Apache, (éventuellement IIS)
- De quoi faire exécuter un programme sur le
serveur - On peut programmer en C, en Fortran ou en
assembleur ce sont des CGI, ils ne sont pas
indépendants de la plateforme dexécution ! - On préfèrera utiliser des interpréteurs PHP,
Java, Perl qui eux sont indépendants de la
plateforme dexécution - Souvent une base de données
- MySql, Postgres ou Oracle, etc.
- La possiblité de solliciter un interpréteur
localisé sur le navigateur du client - Nestcape, IE et leur interpréteur commun
JavaScript
11Scripts clients et scripts serveurs
12Scripts et scripts distinguons bien
- Ce qui est exécuté sur le serveur le script PHP
- Tout comme les ASP (Vbscript), les servlets
(Java), les CGI () - Et ce qui est exécuté sur le navigateur le
script JavaScript - Tout comme les applets (Java), les ActivX, les
plugins propriétaires
Ces scripts, PHP ou JS sexécutent lorsque
lutilisateur agit sur un objet du formulaire
bouton, remplissage dun champ, sélection dans
une liste,
13Types de scripts
- La programmation en JavaScript est de type
événementielle. On écrira essentiellement de
courtes fonctions réalisant des tests ou
manipulant linterface - Par exemple, on teste immédiatement, lors de la
saisie du champ âge du candidat , que les
caractères entrés sont bien des chiffres et que
la valeur est cohérente - La programmation en PHP est plutôt séquentielle
- Par exemple, on déroule les instructions
permettant dinsérer dans la base de données les
valeurs transmises depuis le formulaire
14Choisissons
- Ce qui va sexécuter sur le navigateur
- Et ce qui va sexécuter sur le serveur
15Recommandations
- Si vous faites un contrôle de saisie
- Vous pouvez utiliser JavaScript sur le client
- Avantage rapidité, instantanéité, sanction
immédiate, pas daccès réseau - Inconvénient si vous utilisez seulement un
contrôle JS votre application doit sassurer que
JS nest pas désactivé sur le navigateur - Vous pouvez utiliser PHP sur le serveur
- Avantage impossible de court-circuiter le
contrôle - Inconvénient accès serveur, pas de contrôle pas
à pas possible, sanction a posteriori - Vous pouvez utiliser les deux
- Avantage rapidité et contrôle temps réel
- Inconvénient double codage
16Exercice
- Une calculette Par qui allez-vous faire
effectuer la conversion ? - Par du code JavaScript sur le navigateur ?
- Par du code PHP sur le serveur ?
- Et un script qui affiche lheure ?
- Navigateur ou serveur ?
17Quels langages ?
18Combien de langages pour le programmeur 2, 3 ou 4
?
- On considère quil connaît le HTML
- Linterpréteur PHP et le langage PHP !
- Si lon veut accéder à une base de données, il
faudra alors connaître un peu de SQL - Et si on veut exécuter du code côté client ,
on devra connaître le JavaScript
19Les langages
- 2 langages de programmation PHP et JavaScript
- Syntaxe proche du C, de Java, de Perl
- Les codes sont insérés dans la page HTML
- Le code PHP est interprété sur le serveur avant
lenvoi de la page - Le code PHP nest donc pas visible
- Le code JS est interprété par le navigateur, soit
à réception, soit sur un événement - Le code JS peut être visualisé comme le code HTML
- Pas de réels outils de debug
- 1 langage de composition de page Web HTML
- 1 langage dinterrogation de la base de données
SQL
20Initiation à PHP
- PHP Personnal Home Page ?
- PHP Hypertext PreProcessor ?
- Créé par Rasmus
Ledorf en 1994
21Caractéristiques du langage
- Le langage de scripting du Web un standard de
fait ! - Facile à apprendre et à utiliser
- Excellent support des SGBD (Oracle, MS, MySql,
DB2) - Interface pour tous les protocoles FTP, SMTP,
LDAP, SNMP.. - Interface avec les couches systèmes sockets,
file system - Accès aux images et aux formats daffichage
gif, PDF - Connexions sécurisées (SSL)
- Utilisation en mode conventionnel ou objet
- Interpréteur disponible sur toutes les
plateformes Linux, Windows, MacOs
22Insérer du code PHP
Fichier test.php sur le serveur
- Directement dans le code HTML
- En remplaçant lextension .html du fichier par
lextension .php - lt? ?gt
- lt?php ?gt
- ltscript language"php"gt
- lt/scriptgt
23Premier programme
info.php
lt?php phpinfo() ?gt
- Editer ce programme
- Copier le à la racine du serveur (htdocs)
- Appeler l'url http//localhost/info.php
- Vous recevrez une page contenant toutes les
caractéristiques et options de votre interpréteur
PHP
L'installation de PHP sur le serveur et de sa
configuration (php.ini) sera vue demain
24Le langage
- Syntaxe héritée du C
- Méme séparateur pour les instructions le
- Méme types de commentaires
- / commentaires sur plusieurs lignes ...
- ...Fin des commentaires /
- // une seule ligne de commentaires
- Tous les types de données entiers, nombres à
virgule flottante, chaînes de caractères,
tableaux, objets - Des entiers 123, -24, 0677 (octal), 0x456
(hexa) - Des flottants 12.34, 1.2e3
- Un booléen true ou false
- Une chaîne de caractères hello le monde
- ...
25Les variables
- Une variable en PHP commence par le caractère
- _nom, index, k2, annee_de_naissance
- Les variables sont sensibles à la casse
- Les variables nont pas à être déclarées
- Les variables ne sont pas typées, cest le
contexte qui décide - var 24 // var représente un entier...
- var mardi // ...puis une chaîne de
caractères - On peut faire des variables dynamiques (variable
de variable) - var jour
- var mardi
- echo jour // imprimera mardi
26Transtypage ou casting
casting.php
lt?php test "1945" echo gettype(test)
test (bool) test echo gettype(test)
echo (test) ?gt
- (int), (integer) - type entier
- (bool), (boolean) - booléen
- (real), (double), (float) - type double
- (string) - type chaîne
- (array) - type tableau
- (object) - type objet
27Interprétation
- Une chaîne de caractères est définie entre simple
quote 'ou entre double quote " - Si on utilise la double quote, les variables
inclues sont interprétées - Si on utilise la simple quote, les variables
inclues sont prises comme tel - nom "Vargas"
- //
- politesse "Bonjour Mme nom ltbrgt"
- echo politesse
- Imprime Bonjour Mme Vargas
- politesse 'Bonjour Mme nom ltbrgt'
- echo politesse
- Imprime Bonjour Mme nom
28Variable static
Mais, dans une seule exécution du programme !
- Comme en C, la variable ne perd pas sa valeur à
chaque appel du bloc - Utilisé dans un contexte récursif
- function compte()
- static compteur 0
- compteur
- while (compteur lt10)echo compteur compte()
-
- compte() affiche
123456789
29Définition de constantes
- L'habitude est d'écrire les constantes en
majuscules - Lorsque l'on utilise une constante, on ne met pas
de devant son nom
- define ("IN2P3","http//www.in2p3.fr")
- print ("lta href".IN2P3."gtweb in2p3lt/agt")
30Inclusion de fichiers request et include
- Les fichiers importés étant supposés de lHTML,
ils devront comporter des balises PHP - require ("nom_du_fichier") remplace
linstruction par le contenu du fichier - include ("nom_du_fichier") évalue le code
contenu dans le fichier
lt?php include ('database.php') cxDBmysql_connec
t(HOST,USER,PWD) if (!cxDB) ?gt
31Variables HTTP
- On accède grâce au tableau associatif _SERVER
aux variables accessibles depuis les CGI
lt? if (_SERVER"REQUEST_METHOD""GET")
print (_SERVER"QUERY_STRING"."ltbrgt") print
(_SERVER"HTTP_USER_AGENT"."ltbrgt") print
(_SERVER"HTTP_REFERER"."ltbrgt") ?gt
32Tableaux
- Tableau nominatif
- labo array('ccin2p3',Lyon','51')
- print (labo0)
- Tableau associatif
- labo array(nomgt'ccin2p3',villegt'Lyon',agents
gt'51') - print (labo'ville')
- Les fonctions sizeof() et count() retournent la
dimension du tableau - On a ce qu'il faut pour gérer un pointeur
permettant de naviguer dans le tableau ( next(),
prev(), reset() ) et ce qu'il faut pour trier
le tableau (sort()..) -
imprime Lyon
33Syntaxe du langage
Tout le monde connaît ?
- On nen parle pas, cest comme le C
- Méme structure de contrôle
- for, if then else, do, while, switch, foreach,
break, continue, - Mémes opérateurs mathématiques
- - / --
- Mêmes opérateurs logiques
- !
- Mêmes opérateurs de comparaison
- ! gt lt lt gt
- sauf pour la concaténation où on utilise le
point . - nom "Adamberg"
- salutation "Bonjour Monsieur ".nom
- echo salutation
-
- affiche Bonjour
Monsieur Adamberg
34Fonction utilisateur
function ttc(montantHT) taux 1.186
return montantHT taux montantTTC
ttc(somme)
- Il est possible d'avoir des paramètres optionnels
(comme en c) - function identite(sexe"masculin",langue"franca
is") - ...
35Bibliothèques de fonctions
- La distribution PHP intègre des centaines de
fonctions pour tout faire ! - On n'a pas parlé du traitement des chaînes de
caractères il y a toutes celles du C (strxxx)
plus des tas d'autres ! - Evidement toutes les fonctions mathématiques
- Il y a tout pour gérer des dates (c'est très très
facile ) - Tout pour gérer, les protocoles, les systèmes de
fichiers, les SGBD - et tout pour faire du XML, XSL des
web-services - Voir la doc en ligne
- http//dev.nexen.net/docs/php/annotee/indexes.func
tions.php -
36Portée des variables
- La portée dune variable dépend du contexte dans
lequel elle est définie - Hors dune fonction, elle est globale, mais doit
être déclarée comme telle dans la fonction, sous
peine de redéfinition - Dans une fonction elle est locale, sauf
définition comme global - nom "Vargas"
- function jamaisTest()
- global nom
- global prenom
- prenom "Fred"
- titre "eacutecrivain"
-
- jamaisTest()
- echo "prenom nom titre" imprime Fred
Vargas
Tiens ! pourquoi ça imprime pas "Fred Vargas
écrivain" ?
37Construire une application
38Un formulaire
lt/formgt
39Traitement du formulaire
- Le formulaire est décrit dans une page HTML qui
peut être statique ou dynamique - Le programme PHP décrit par le paramètre
action de la balise form , est invoqué
lors du clic sur le bouton submit - Le programme PHP doit récupérer les valeurs
saisies dans les différents champs du formulaire
pour les traiter - Cest le nom, au sens HTML, défini par le
paramètre name , qui va être utilisé pour
créer la variable PHP
40Récupération de la valeur des champs -1
test.html
test.php
lthtmlgt ltform namexyz actiontest.phpgt Pr
eacutenom ltinput nameprenomgt lt/formgt lt/htmlgt
lt? echo "Bonjour".prenom ?gt
41Récupération de la valeur des champs -2
- Pour des raisons de sécurité, la méthode
précédente nest pas conseillée - On utilisera le tableau associatif _REQUEST dont
les clés sont les noms des éléments HTML
_REQUEST
_REQUEST"prenom" Jean-Baptiste
42Récupération de la valeur des champs -3
test.html
test.php
lthtmlgt ltform namexyz actiontest.phpgt Pr
eacutenom ltinput nameprenomgt lt/formgt lt/htmlgt
lt? prenom _REQUEST"prenom" echo
"Bonjour".prenom ?gt
? Cette méthode fonctionne quelque soit la
méthode (GET ou POST) choisie pour la
transmission du formulaire.
43Noubliez pas !
- Lexécution du programme PHP sur le serveur
- Effectue un certain nombre dactions
- Vérification des données reçues, insertion
denregistrements dans une base de données,
récupération de fichiers, etc. - Mais en final génère toujours de lHTML à
destination du client - Message de confirmation, derreurs, résultats
divers, etc. - Si on ne génère pas de code HTML le résultat
retourné est une page vide !
44Avant de faire des exercices
xxx.in2p3.fr
yyy.in2p3.fr
Serveur WEB (Apache)
SGBD MySQL
Interpréteur PHP
HTDOCS
.html
.php
Réseau
45Exercice
- Tester request.html et request.php
- Vérifier la bonne exécution en POST et en GET
(remarquer lURL) - Comprendre la fonction isset qui teste si une
variable a été définie - En appelant directement le PHP
- En passant par le formulaire HTML
- Faites la différence entre une variable non
définie et une variable vide
request.html
request.php
lthtmlgt ltform namexyz actionrequest.php
methodpostgt Mail ltinput namemailgt lt/formgt lt/h
tmlgt
lt? if (isset(_REQUEST"mail")) mail
_REQUEST"mail" print ("ltbrgtAdresse mail
mail") else print ("ltpgtmail non
deacutefini !") ?gt
46A propos de cet exercice
- Imaginons que le champ mail soit obligatoire
- Qui devra sassurer quil a bien été rempli ?
- Le poste client avec du JavaScript ?
- Et si JS nest pas activé ? Doit-on interdire
laccès au formulaire ? - Le serveur devra aussi effectuer des
vérifications, dans le cas où lon admet que JS
soit désactivé.
47La page HTML avec un script client
lireMail.html
lthtmlgt ltheadgt ltscriptgt //javaScript function
verifMail() if (document.forms0.mail.value.le
ngth lt 6 document.forms0.mail.value.ind
exOf("_at_") lt 0 document.forms0.mail.valu
e.indexOf(".") lt 0) alert ("mail
incorrect") return false
lt/scriptgt lt/headgtltbodygt ltform name"xyz"
action "recevoirMail.php" method"post"
onSubmit"return verifMail()" gt Mail ltinput
name"mail"gt lt/formgt lt/bodygtlt/htmlgt
48Le script serveur PHP
recevoirMail.php
lt? if (isset(_REQUEST"mail")) mail
_REQUEST"mail" if (strlen(mail) lt 6
! strpos(mail,'_at_') ! strpos(mail,'.')
) print ("ltfont colorredgtltbgtMail
incorrect !lt/bgtlt/fontgt ") print ("lta
hreflireMail.htmlgtrecommencezlt/agt") else
print ("Adresse mail mail")
else print ("lth1gtINTERDIT !") ?gt
Au fait ! Dans quel cas passe-t-on dans cette
branche ?
49Conclusion
- Tester côté client est plus ergonomique
- Sanction immédiate, pas de nécessité de regénérer
le formulaire, on peut tester chaque saisie en
temps réel (onBlur, onFocus) mais impose que le
client autorise JS - Tester côté serveur marche à tous les coups
- Mais ne tester que côté serveur, oblige à
régénérer le formulaire, à conserver le contenu
des champs qui étaient déjà remplis correctement
- Tester des 2 côtés cest parfait, mais cest plus
de travail !
50Le formulaire est-il toujours issu dune page
HTML statique ?
Non ! le formulaire est ici généré en PHP, les
options de ce select sont issues dune
requête à une base de données
51Un seul fichier !
remarque.php
ltHTMLgtltHEADgtltTITLEgt tout en un
lt/TITLEgt ltscript langagejavascriptgt mail
/a-zA-Z0-9a-zA-Z0-9\.-__at_((a-zA-Z0-9\-)\.
)(a-zA-Z0-9)/ function sMail()
okmail.test(document.forms0.elements1.value)
if (!ok) alert ("adresse mail invalide
!") return false lt/scriptgt lt/HEADgt
ltBODY BGCOLOR"e3e3e3"gt lt?PHP if (
!isset(_REQUEST"mail")) ?gt ltform
nameremarque actionremarque.php methodpost
onSubmit"return sMail()"gt Votre
commentaire ltbrgt lttextarea
nametextegtlt/textareagtltbrgt Votre e-mail
?ltbrgt ltinput namemailgtltinput typesubmit
value"envoyer"gt lt/formgt lt? else print
("Merci de votre commentaireltbrgt ") print
("Nous vous reacutepondrons agrave
"._REQUEST"mail") ?gt lt/BODYgtlt/HTMLgt
52Code dans code
- Bien sûr, comme PHP génère du HTML, il peut aussi
générer du JavaScript !
erreurJS.php
lt?php ... erreur fopen (... echo
"ltscript language'JavaScript'gt" echo
"alert(erreur)" echo "lt/scriptgt" ... ?gt
53Pour apprendre PHP, programmons
- Lenvoi dun mail
- Laccès à un serveur LDAP
- Ecrire et lire des fichiers sur le serveur
- Un transfert de fichiers entre le client et le
serveur
54Envoyer un mail depuisun programme PHP
55Générer un mail
http//webtest.in2p3.fr/mail.php
lt? pour "Daniel CHARNAY ltcharnay_at_in2p3.frgt" s
ujet "Ecole Web-Services" enTete "From
Bill Gates ltbgates_at_microsoft.frgt\n" enTete
enTete."CC Steve_at_apple.com\n" contenu
"Bonjour,\nJe voudrais suivre cette formation
SVP\n " contenu contenu.
"Cordialement,\nBill" mail(pour,sujet,contenu,
enTete) echo "Mail envoyeacute agrave
pour" ?gt
56Utiliser les services LDAP
57Se connecter à un serveur LDAP -1
chldap.html
ltHTMLgtltHEADgtltTITLEgt recherche Ldap (formulaire)
lt/TITLEgtlt/HEADgt ltBODY BGCOLOR"e3e3e3"
onLoad"document.recherche_ldap.onCherche.focus()
"gt ltform name"recherche_ldap"
action"ldap.php"gt Entrer les premiers
caractegraveres du nom ltinput
name"onCherche" onBlur"if(this.value
.length0)alert('ca va etre long !')"gt
ltinput type"submit"
value"chercher"gt lt/formgt lt/BODYgtlt/HTMLgt
58Se connecter à un serveur LDAP -2
ldap.php
lt? define ("SERVEUR_LDAP","ldap.in2p3.fr") define
("SCHEMA_LDAP","oin2p3, cfr") onCherche
onCherche."" connexion ldap_connect(SERVEUR_
LDAP) if (connexion) reponseldap_bind(con
nexion) if (reponse)
chercherldap_search(connexion,SCHEMA_LDAP,"sn
onCherche") resultatldap_get_entries(con
nexion,chercher) print(resultat"count".
" reacuteponsesltpgt") for (i0
iltresultat"count" i)
print(resultati"cn"0." -
ltigt".resultati"mail"0."lt/igtltbrgt")
else exit ("Connexion impossible
agrave ".SERVEUR_LDAP) ?gt
Il existe une cinquantaine de fonctions
permettant de travailler avec une base LDAP !
sn surname resultat indice clé valeur n
59Envoyer des fichiers vers un serveur
60 upload dun fichier
- On se propose de transférer un fichier situé sur
le poste du client vers le serveur - Cest exactement, appliqué au protocole HTTP, un
document attaché à un mail (protocole SMTP) - Exemples
- Transférer des photos numériques vers un centre
de tirage - Transférer un article vers un site de conférences
- Etc.
61La balise HTML ltinput type"file"gt
- Permet de browser le disque local pour
sélectionner un fichier - Permet dattacher ce fichier à la suite des
variables dun formulaire, sous forme dun
message multipart
transférer.html
ltHTMLgtltHEADgtltTITLEgt transferer
lt/TITLEgtlt/HEADgt ltBODY BGCOLOR"e3e3e3"gt ltform
name"transferer" ENCTYPE"multipart/form-da
ta" action"stocke.php"
method"post"gt ltinput name"monFichier"
type"file"gt ltinput type"submit"
value"envoyer"gt lt/formgt lt/BODYgt lt/HTMLgt
62Sur le serveur
il ny a rien à faire !
- De même que lon a utilisé _REQUEST pour les
données du formulaire - On va utiliser _FILES pour récupérer dans ce
tableau associatif - Le nom original du fichier (nom sur le poste
client) - Le nom temporaire (nom du fichier stocké dans un
répertoire temporaire défini dans le php.ini) - La taille du fichier transféré
63Exercice
- Télécharger un texte et stocker le serveur
- Proposer laffichage de ce texte dans une page
HTML en faisant surbriller toutes les zones de
texte correspondant à un motif choisi par
lutilisateur - Cet exercice permettra de manipuler des fonctions
manipulant des fichiers - Cet exercice permettra de poser le problème des
sessions
64Correction -1
surbrille.php
lthtmlgtltheadgt ltstyle type"text/css"gt.sur
background-color Yellowlt/stylegt lt/headgtltbody
bgcolore3e3e3gt ltform namechMotif
actionsurbrille.phpgt motif agrave rechercher
ltinput name"motif"gt ltinput type"submit"
value"chercher"gt ltinput type"hidden"
name"leFichier"gt lt/formgt lthrgt lt?php define
("WEB","http//localhost/CoursDebPHP/monDossier/")
define ("HTDOCS","C\\Program Files\\Apache
Group\\Apache\\htdocs\\") dossier
HTDOCS."CoursDebPHP\\monDossier\\"
65Correction -2
surbrille.php (suite)
//Premier passage on vient du formulaire
dupload // if (isset(_FILES"monFichier""tmp_n
ame")) fichier dossier._FILES"monFichie
r""name" copy (_FILES"monFichier""tmp_n
ame",fichier) fichier_2
ereg_replace("\\\\","\\\\",fichier)
print("ltscriptgtdocument.chMotif.leFichier.value'
fichier_2'lt/scriptgt") fd fopen
(fichier,"r") while (!feof (fd))
ligne fgets(fd, 256) echo
ligne."ltbrgt" fclose (fd) else
66Correction -3
surbrille.php (suite et fin)
// Passage suivant on vient du formulair de
saisie du motif // fichier _REQUEST"leFichier
" fichier ereg_replace("\\\\\\\\","\\",fi
chier) fd fopen (fichier,"r") while
(!feof (fd)) ligne fgets(fd, 256)
motif _REQUEST"motif" ligne
ereg_replace(motif,"ltspan class'sur'gtmotiflt/spa
ngt",ligne) echo ligne."ltbrgt"
fclose (fd) fichier_2 ereg_replace("\\\\",
"\\\\",fichier) print("ltscriptgtdocument.chMot
if.leFichier.value'fichier_2'lt/scriptgt") ?gt
lthrgtltbodygtlt/htmlgt
67Sessions et transactions
68Les transactions sur le Web
- Le problème
- Vous vous connectez sur le serveur de votre
banque avec nom et mot de passe - Vous circulez dans plusieurs pages (relevé de
compte, virement, etc.) - Entre chaque page vous êtes deconnecté c'est la
nature du Web ! - Or, vous ne redonnez pas votre nom et mot de
passe à chaque page - comment ça marche ?
69Le mécanisme de sessions
- Le mode déconnecté du Web impose, si on veut
implémenter la persistance d'informations entre
les différentes pages, d'utiliser des mécanismes
particuliers - Retransmettre les données nécessaires, de
formulaire en formulaire, grâce à des champs
cachés (ltinput typehidden ) - Utiliser un mécanisme de session, autorisant de
stocker sur le serveur des données temporaires - Dans ce cas, de page en page, on ne transmet
qu'un identifiant, celui-ci étant géré
automatiquement par le système - On peut aussi éventuellement utiliser un cookie
pour s'identifier
70Construire une session
- On appelle la fonction session_start()
- On demande la conservation de variables au
travers dun tableau associatif
http_session_vars"ma_variable" - C'est tout ! (ou presque)
test.html
lthtmlgt ... ltform ... action"un.php"gt Votre
nom ltinput name"login"gt Votre mot de passe
ltinput typepassword name"pwd"gt ...
un.php
lt?php session_start() //verification dans la
base //login et pwd sont valides... HTTP_SESSION
_VARS"utilisateur"_REQUEST"login" HTTP_SES
SION_VARS"pass_phrase"_REQUEST"pwd" .... ltf
orm ... action"deux.php" ...
deux.php
71Détaillons
session.html
lthtmlgtltbody bgcolor"e3e3e3"gt ltform name"tst"
action"un.php" method"post"gt Votre code
ltinput name"login"gt Votre mot de passe
ltinput type"password" name"pwd"gt ltinput
type"submit" value"me connecter"gt lt/formgtlt/bodygt
lt/htmlgt
Introduit automatiquement
ltINPUT TYPE"HIDDEN" NAMEPHPSESSID VALUEebd66
72Attention !
- A ne jamais mettre quelque chose avant
l'instruction session_start ! - Parce que php écrit un header http pour glisser,
entre-autre, sa variable cachée - La sanction serait un warning, éventuellement un
fonctionnement anormal du code
73Exercices
- Faire un système qui compte combien de fois VOUS
accédez à une page et non combien de fois cette
page est accédée ! - Imaginer le compteur classique qui compte le
nombre d'accès à une page - Imaginez comment limiter le temps de
stationnement sur une page
74Correction compter les accés
comptons.php
lt?php session_start() if (!isset(HTTP_SESSION_VA
RS'compteur')) HTTP_SESSION_VARS'compteur'
1 else HTTP_SESSION_VARS'compteur' ?gt
Vous ecirctes venu ltfont size"6" color
"red"gt lt? echo HTTP_SESSION_VARS'compteur'
?gt lt/fontgt fois ltform actioncomptons.phpgt ltinput
typesubmit value"continuer"gt lt/formgt
75Le stationnement limité ou la déconnexion
automatique d'une application
- Définir une constante de temps maximum
MAXI_INACTIF - Ouvrir la session, prendre le temps d'arrivée
time()et le stocker en variable de session
HTTP_SESSION_VARS'temps' - Lorsque l'on change de page dans l'application,
la nouvelle page effectue - if (time()- HTTP_SESSION_VARS'temps'gt
MAXI_INACTIF - on sort en temps dépassé
- Else
- on stocke le nouveau temps et on continue
76Correction
limite.php
lt?php define ("MAX_INACTIF",10) session_start(
) if (!isset(HTTP_SESSION_VARS'compteur'))
HTTP_SESSION_VARS'compteur'1
HTTP_SESSION_VARS'temps'time() else if
((time()-HTTP_SESSION_VARS'temps')gtMAX_INACTIF)
session_destroy() die("Temps
deacutepasseacute !")
HTTP_SESSION_VARS'compteur'
HTTP_SESSION_VARS'temps'time() ?gt Vous
ecirctes venu ltfont size"6" color "red"gt lt?
echo HTTP_SESSION_VARS'compteur' ?gt lt/fontgt
fois ltform actionlimite.phpgt ltinput typesubmit
value"continuer"gt avant 10 secondes lt/formgt
77URL's et ouvrages
- www.php.net (en)
- dev.nexen.net (en)
- www.zend.net (en)
- www.phpfrance.com (fr)
- www.ilovephp.com (fr)
ou chez Eyrolles ...