Systme de veille Internet au CNRS - PowerPoint PPT Presentation

1 / 77
About This Presentation
Title:

Systme de veille Internet au CNRS

Description:

Ces scripts, PHP ou JS s'ex cutent lorsque l'utilisateur agit sur un objet du formulaire : bouton, remplissage d'un champ, s lection dans une liste, ... – PowerPoint PPT presentation

Number of Views:194
Avg rating:3.0/5.0
Slides: 78
Provided by: DIST71
Category:
Tags: cnrs | agit | internet | systme | veille

less

Transcript and Presenter's Notes

Title: Systme de veille Internet au CNRS


1
Cette 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
2
Construire des applications Web initiation à
PHP, MySQL, JavaScript
Daniel.Charnay_at_in2p3.fr
3
HTML et HTML dynamique, rappels
4
Le modèle HTML statique
Serveur WEB
htdocs
Fichier hello.html
Internet
5
Le modèle HTML dynamique avec les CGI
execution
hello.c
compilation
6
Le modèle HTML dynamique avec un interpréteur
Internet
Interprêteur
7
Présentation de lapplication Web
8
Fonctionnellement 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.

9
Techniquement 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

10
Une 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

11
Scripts clients et scripts serveurs
12
Scripts 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,
13
Types 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

14
Choisissons
  • Ce qui va sexécuter sur le navigateur
  • Et ce qui va sexécuter sur le serveur

15
Recommandations
  • 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

16
Exercice
  • 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 ?

17
Quels langages ?
18
Combien 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

19
Les 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

20
Initiation à PHP
  • PHP Personnal Home Page ?
  • PHP Hypertext PreProcessor ?
  • Créé par Rasmus
    Ledorf en 1994

21
Caracté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

22
Insé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

23
Premier 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
24
Le 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
  • ...

25
Les 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

26
Transtypage 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

27
Interpré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

28
Variable 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

29
Dé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")

30
Inclusion 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
31
Variables 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
32
Tableaux
  • 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

33
Syntaxe 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

34
Fonction 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")
  • ...

35
Bibliothè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

36
Porté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" ?
37
Construire une application
38
Un formulaire
lt/formgt
39
Traitement 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

40
Ré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
41
Ré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
42
Ré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.
43
Noubliez 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 !

44
Avant de faire des exercices
xxx.in2p3.fr
yyy.in2p3.fr
Serveur WEB (Apache)
SGBD MySQL
Interpréteur PHP
HTDOCS
.html
.php
Réseau
45
Exercice
  • 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
46
A 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é.

47
La 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
48
Le 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 ?
49
Conclusion
  • 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 !

50
Le 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
51
Un 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
52
Code 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
53
Pour 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

54
Envoyer un mail depuisun programme PHP
55
Gé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
56
Utiliser les services LDAP
57
Se 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
58
Se 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
59
Envoyer 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.

61
La 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
62
Sur 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é

63
Exercice
  • 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

64
Correction -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\\"
65
Correction -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
66
Correction -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
67
Sessions et transactions
68
Les 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 ?

69
Le 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

70
Construire 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
71
Dé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
72
Attention !
  • 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

73
Exercices
  • 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

74
Correction 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
75
Le 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

76
Correction
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
77
URL'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 ...
Write a Comment
User Comments (0)
About PowerShow.com