Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

77
Formation Webmasters- @dc 1 Cette présentation ainsi que les exemples de code sont disponibles à http://ecoles.in2p3.fr Il n’est pas conseillé de l’imprimer en raison des animations utilisant plusieurs couches d'objets

description

Cette présentation ainsi que les exemples de code sont disponibles à http://ecoles.in2p3.fr Il n’est pas conseillé de l’imprimer en raison des animations utilisant plusieurs couches d'objets. Construire des applications Web … …initiation à PHP, MySQL, [JavaScript]. Dan [email protected]. - PowerPoint PPT Presentation

Transcript of Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Page 1: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 1

Cette présentation ainsi que les exemples de code sont disponibles à http://ecoles.in2p3.frIl n’est pas conseillé de l’imprimer en raison des animations utilisant plusieurs couches d'objets

Page 2: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Construire des applications Web …Construire des applications Web …

…initiation à PHP, MySQL, [JavaScript]…initiation à PHP, MySQL, [JavaScript]

[email protected]

Page 3: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

HTML et HTML dynamique, rappels HTML et HTML dynamique, rappels

Page 4: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 4

Le modèle HTML statique

<html><body>Hello</body></html>

Fichier hello.htmlFichier hello.html

<html><body>Hello</body></html>

Hello

htdocs

Serveur WEB

Internet

Page 5: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 5

Le modèle HTML dynamique avec les CGI

<html><body>Hello</body></html>

Hello%a#|^%%§!$¤

hello.exehello.exe

Cgi-bin

Serveur WEB

executionexecution

printf("<html>");printf("<body>");printf("<Hello>");printf("</body>");printf("</html>");

compilationcompilation

hello.chello.c

Page 6: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 6

Le modèle HTML dynamique avec un interpréteur

<html><body>Hello</body></html>

Helloprintf("<html>");printf("<body>");printf("<Hello>");printf("</body>");printf("</html>");

hello.phphello.php

htdocs

Serveur WEB

Internet

InterprêteurInterprêteur

Page 7: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Présentation de l’application WebPrésentation de l’application Web

Page 8: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 8

Fonctionnellement une application Web c’est :

• 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 d’impôts du Ministère des Finances

L’annuaire de l’IN2P3

Etc.

Page 9: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 9

Techniquement une application Web c’est :

• Une page Web contenant un formulaire HTML envoyé au client

• Du code « autonome » s’exécutant sur un serveur HTTP Le programme est auto suffisant, il calcule par exemple la racine carrée

d’un nombre

• Ou du code s’exé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 s’exécutant dans le navigateur Validation, vérification des saisies

Ergonomie du formulaire

Page 10: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 d’exécution ! On préfèrera utiliser des interpréteurs : PHP, Java, Perl qui eux sont

indépendants de la plateforme d’exé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

Page 11: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Scripts clients et scripts serveursScripts clients et scripts serveurs

Page 12: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 s’exécutent lorsque l’utilisateur agit sur un objet du formulaire : bouton, remplissage d’un champ, sélection dans une liste, …

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, …

Page 13: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 l’interface 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 d’insérer dans la base

de données les valeurs transmises depuis le formulaire

Page 14: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 14

Choisissons …

• Ce qui va s’exécuter sur le navigateur …

• Et ce qui va s’exécuter sur le serveur

Ou sur les

deux ?

Ou sur les

deux ?

Page 15: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 d’accès réseau

Inconvénient : si vous utilisez seulement un contrôle JS votre application doit s’assurer que JS n’est 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

Page 16: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 l’heure ? Navigateur ou serveur ?

Page 17: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Quels langages ?Quels langages ?

Page 18: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 18

Combien de langages pour le programmeur 2, 3 ou 4 ?

• On considère qu’il connaît le HTML

• L’interpréteur PHP et le langage PHP !

• Si l’on 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

Page 19: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 l’envoi de la page

– Le code PHP n’est 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 d’interrogation de la base de données : SQL

Page 20: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Initiation à PHPInitiation à PHP

PHP : Personnal Home Page ?PHP : Personnal Home Page ?

PHP : Hypertext PreProcessor ?PHP : Hypertext PreProcessor ?

Créé par Rasmus Ledorf en 1994Créé par Rasmus Ledorf en 1994

Page 21: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 d’affichage : gif, PDF

• Connexions sécurisées (SSL)

• Utilisation en mode conventionnel ou objet

Interpréteur disponible sur toutes les plateformes : Linux, Windows, MacOs

Page 22: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 22

Insérer du code PHP

• Directement dans le code HTML

• En remplaçant l’extension .html du fichier par l’extension .php

<? … ?>

<?php …?>

<script language="php">…

</script>

<html><head>...</head><body>...

<?echo "Hello le monde !";

?>...

Fichier test.php sur le serveurFichier test.php sur le serveur

<html><head>...</head><body>...Hello le monde !...

Le code PHP est interprêté sur leserveur avant d’être envoyé au client

Code envoyé au clientCode envoyé au client

Page 23: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 23

Premier programme

• 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

<?phpphpinfo();?>

<?phpphpinfo();?>

info.phpinfo.php

L'installation de PHP sur le serveur et de

sa configuration (php.ini) sera vue

demain …

L'installation de PHP sur le serveur et de

sa configuration (php.ini) sera vue

demain …

Page 24: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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’ ...

Page 25: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 n’ont pas à être déclarées

• Les variables ne sont pas typées, c’est 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

Page 26: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 26

Transtypage ou casting

• (int), (integer) - type entier

• (bool), (boolean) - booléen

• (real), (double), (float) - type double

• (string) - type chaîne

• (array) - type tableau

• (object) - type objet

<?php $test = "1945"; echo gettype($test); $test = (bool) $test; echo gettype($test); echo ($test);?>

<?php $test = "1945"; echo gettype($test); $test = (bool) $test; echo gettype($test); echo ($test);?>

casting.phpcasting.php

Ça imprime quoi ?

Ça imprime quoi ?

Page 27: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 <br>";

echo $politesse;

Imprime : Bonjour Mme Vargas

$politesse = 'Bonjour Mme $nom <br>';

echo $politesse;

Imprime : Bonjour Mme $nom

Bonjour Mme VargasBonjour Mme Vargas

affiche

Bonjour Mme $nomBonjour Mme $nom

affiche

Page 28: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 28

• 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 <10){echo $compteur; compte();}

}

compte(); affiche : 123456789

Variable static

123456789123456789

affiche

Mais, dans une seule exécution du programme !

Mais, dans une seule exécution du programme !

Page 29: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 ("<a href=".IN2P3.">web in2p3</a>");

define ("IN2P3","http://www.in2p3.fr");

print ("<a href=".IN2P3.">web in2p3</a>");

Page 30: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 30

Inclusion de fichiers : request et include

• Les fichiers importés étant supposés de l’HTML, ils devront comporter des balises PHP

require ("nom_du_fichier"); remplace l’instruction par le contenu du fichier

include ("nom_du_fichier"); évalue le code contenu dans le fichier

<?phpinclude ('database.php');$cxDB=mysql_connect(HOST,USER,PWD);if (!$cxDB){?>

<?phpinclude ('database.php');$cxDB=mysql_connect(HOST,USER,PWD);if (!$cxDB){?>

<?phpdefine ("HOST","ccmysql.in2p3.fr");define ("USER","leUser");define ("PWD","leMotDePasse");define ("BD", "resa");?>

<?phpdefine ("HOST","ccmysql.in2p3.fr");define ("USER","leUser");define ("PWD","leMotDePasse");define ("BD", "resa");?>

database.phpdatabase.php

Page 31: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 31

Variables HTTP

• On accède grâce au tableau associatif $_SERVER aux variables accessibles depuis les CGI

<?if ($_SERVER["REQUEST_METHOD"]=="GET") print ($_SERVER["QUERY_STRING"]."<br>");print ($_SERVER["HTTP_USER_AGENT"]."<br>");print ($_SERVER["HTTP_REFERER"]."<br>");?>

<?if ($_SERVER["REQUEST_METHOD"]=="GET") print ($_SERVER["QUERY_STRING"]."<br>");print ($_SERVER["HTTP_USER_AGENT"]."<br>");print ($_SERVER["HTTP_REFERER"]."<br>");?>

Page 32: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 32

• Tableau nominatif

$labo = array('ccin2p3',‘Lyon','51');

print ($labo[0]);

• Tableau associatif

$labo = array(nom=>'ccin2p3',ville=>'Lyon',agents=>'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

Tableaux

LyonLyon affiche

ccin2p3ccin2p3 affiche

Page 33: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 33

• On n’en parle pas, c’est 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

== != > < <= >=

• …sauf pour la concaténation où on utilise le point .

$nom = "Adamberg";

$salutation = "Bonjour Monsieur ".$nom;

echo $salutation;

affiche : Bonjour Monsieur Adamberg

Syntaxe du langage Tout le monde

connaît ?Tout le monde

connaît ?

Bonjour Monsieur AdambergBonjour Monsieur Adambergaffiche

Page 34: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 34

Fonction utilisateur

• Il est possible d'avoir des paramètres optionnels (comme en c++)

function identite($sexe="masculin",$langue="francais")

...

function ttc($montantHT){ $taux = 1.186; return $montantHT * $taux;}…$montantTTC = ttc($somme);

function ttc($montantHT){ $taux = 1.186; return $montantHT * $taux;}…$montantTTC = ttc($somme);

Page 35: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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.functions.php

Page 36: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 36

Portée des variables

• La portée d’une variable dépend du contexte dans lequel elle est définie Hors d’une 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 = "&eacute;crivain";

}jamaisTest();echo "$prenom $nom $titre"; imprime : Fred Vargas

Fred VargasFred Vargasaffiche

Tiens ! pourquoi ça imprime pas "Fred Vargas écrivain" ?

Tiens ! pourquoi ça imprime pas "Fred Vargas écrivain" ?

Page 37: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Construire une applicationConstruire une application

Page 38: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 38

Un formulaire …

<input name=email><input name=email>

<input name=commentaire><input name=commentaire>

<input type=submit><input type=submit>

<select name=objet><select name=objet>

<a href=# onClick=document.forms[0].date.value=28>28</a> <input type=hidden name=date><input type=hidden name=date>

<select name=annee<select name=annee

<input name=titre><input name=titre>

<form name=resa action=resa.php…<form name=resa action=resa.php…

</form>

Page 39: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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

• C’est le nom, au sens HTML, défini par le paramètre « name », qui va être utilisé pour créer la variable PHP

Page 40: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 40

Récupération de la valeur des champs -1

<html><form name=xyz action=test.php>Pr&eacute;nom :<input name=prenom></form></html>

<html><form name=xyz action=test.php>Pr&eacute;nom :<input name=prenom></form></html>

<?echo "Bonjour".$prenom; ?>

test.htmltest.html test.phptest.php

Cette méthode n’est possible que siregister_globals = ondans le fichier de configuration de l’interpréteur PHP (php.ini)

Page 41: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 41

Récupération de la valeur des champs -2

• Pour des raisons de sécurité, la méthode précédente n’est pas conseillée…

• On utilisera le tableau associatif $_REQUEST dont les clés sont les noms des éléments HTML

Clé Valeur

nom Adamsberg

prenom Jean-Baptiste

email [email protected]

$_REQUEST$_REQUEST

$_REQUEST["prenom"] = Jean-Baptiste

Page 42: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 42

Récupération de la valeur des champs -3

<html><form name=xyz action=test.php>Pr&eacute;nom :<input name=prenom></form></html>

<html><form name=xyz action=test.php>Pr&eacute;nom :<input name=prenom></form></html>

<?$prenom = $_REQUEST["prenom"];echo "Bonjour".$prenom; ?>

test.htmltest.html test.phptest.php

Cette méthode fonctionne quelque soit la méthode (GET ou POST) choisiepour la transmission du formulaire.

Page 43: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 43

N’oubliez pas !

• L’exécution du programme PHP sur le serveur … Effectue un certain nombre d’actions…

Vérification des données reçues, insertion d’enregistrements dans une base de données, récupération de fichiers, etc.

Mais en final génère toujours de l’HTML à destination du client Message de confirmation, d’erreurs, résultats divers, etc. Si on ne génère pas de code HTML le résultat retourné est … une

page vide !

Page 44: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 44

Avant de faire des exercices …

Interpréteur PHP

Serveur WEB (Apache)

HTDOCS

.php.html

SGBD MySQLSGBD MySQL

Réseau

xxx.in2p3.fr

yyy.in2p3.fr

Page 45: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 45

Exercice

• Tester « request.html » et « request.php » Vérifier la bonne exécution en POST et en GET (remarquer l’URL)

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

<html><form name=xyz action=request.php method=post>Mail :<input name=mail></form></html>

<html><form name=xyz action=request.php method=post>Mail :<input name=mail></form></html>

<?if (isset($_REQUEST["mail"])){ $mail = $_REQUEST["mail"]; print ("<br>Adresse mail : $mail");}else{ print ("<p>mail non d&eacute;fini !");}?>

<?if (isset($_REQUEST["mail"])){ $mail = $_REQUEST["mail"]; print ("<br>Adresse mail : $mail");}else{ print ("<p>mail non d&eacute;fini !");}?>

request.htmlrequest.html request.phprequest.php

Page 46: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 46

A propos de cet exercice

• Imaginons que le champ « mail » soit obligatoire

• Qui devra s’assurer qu’il a bien été rempli ? Le poste client avec du JavaScript ?

Et si JS n’est pas activé ? Doit-on interdire l’accès au formulaire ?

Le serveur devra aussi effectuer des vérifications, dans le cas où l’on admet que JS soit désactivé.

Page 47: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 47

La page HTML avec un script « client »

<html><head><script> //javaScriptfunction verifMail(){ if (document.forms[0].mail.value.length < 6 || document.forms[0].mail.value.indexOf("@") < 0 || document.forms[0].mail.value.indexOf(".") < 0) { alert ("mail incorrect"); return false; }}</script></head><body><form name="xyz" action= "recevoirMail.php" method="post" onSubmit="return verifMail();" >Mail :<input name="mail"></form></body></html>

<html><head><script> //javaScriptfunction verifMail(){ if (document.forms[0].mail.value.length < 6 || document.forms[0].mail.value.indexOf("@") < 0 || document.forms[0].mail.value.indexOf(".") < 0) { alert ("mail incorrect"); return false; }}</script></head><body><form name="xyz" action= "recevoirMail.php" method="post" onSubmit="return verifMail();" >Mail :<input name="mail"></form></body></html>

lireMail.htmllireMail.html

Bloque l’appel au programme PHP en cas d’erreur

Page 48: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 48

Le script serveur PHP

<?if (isset($_REQUEST["mail"])){

$mail = $_REQUEST["mail"];if (strlen($mail) < 6 || ! strpos($mail,'@') || ! strpos($mail,'.') ){ print ("<font color=red><b>Mail incorrect !</b></font> "); print ("<a href=lireMail.html>recommencez</a>"); } else { print ("Adresse mail : $mail"); }

}else{print ("<h1>INTERDIT !");

}?>

<?if (isset($_REQUEST["mail"])){

$mail = $_REQUEST["mail"];if (strlen($mail) < 6 || ! strpos($mail,'@') || ! strpos($mail,'.') ){ print ("<font color=red><b>Mail incorrect !</b></font> "); print ("<a href=lireMail.html>recommencez</a>"); } else { print ("Adresse mail : $mail"); }

}else{print ("<h1>INTERDIT !");

}?>

recevoirMail.phprecevoirMail.php

Au fait ! Dans quel cas passe-t-on dans

cette branche ?

Au fait ! Dans quel cas passe-t-on dans

cette branche ?

Page 49: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 c’est parfait, mais c’est plus de travail !

Page 50: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 50

Le formulaire est-il toujours issu d’une page HTML statique ?

Non ! le formulaire est ici généré en PHP, les optionsde ce « select » sont issues d’une requête à unebase de données

Page 51: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 51

Un seul fichier !<HTML><HEAD><TITLE> tout en un </TITLE><script langage=javascript> mail = /^[a-zA-Z0-9]+[a-zA-Z0-9\.-_]+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/; function sMail(){ ok=mail.test(document.forms[0].elements[1].value) if (!ok){ alert ("adresse mail invalide !"); return false; } }</script></HEAD><BODY BGCOLOR="#e3e3e3"><?PHPif ( !isset($_REQUEST["mail"])){?> <form name=remarque action=remarque.php method=post onSubmit="return sMail();"> Votre commentaire :<br> <textarea name=texte></textarea><br> Votre e-mail ?<br> <input name=mail><input type=submit value="envoyer"> </form><?} else { print ("Merci de votre commentaire<br> "); print ("Nous vous r&eacute;pondrons &agrave; ".$_REQUEST["mail"]);}?></BODY></HTML>

<HTML><HEAD><TITLE> tout en un </TITLE><script langage=javascript> mail = /^[a-zA-Z0-9]+[a-zA-Z0-9\.-_]+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/; function sMail(){ ok=mail.test(document.forms[0].elements[1].value) if (!ok){ alert ("adresse mail invalide !"); return false; } }</script></HEAD><BODY BGCOLOR="#e3e3e3"><?PHPif ( !isset($_REQUEST["mail"])){?> <form name=remarque action=remarque.php method=post onSubmit="return sMail();"> Votre commentaire :<br> <textarea name=texte></textarea><br> Votre e-mail ?<br> <input name=mail><input type=submit value="envoyer"> </form><?} else { print ("Merci de votre commentaire<br> "); print ("Nous vous r&eacute;pondrons &agrave; ".$_REQUEST["mail"]);}?></BODY></HTML>

remarque.phpremarque.php

Remarquez l'allée venue entre le code PHP et HTML et le

conditionnement de ce dernierpar le if(…

Page 52: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 52

Code dans code

• Bien sûr, comme PHP génère du HTML, il peut aussi générer du JavaScript !

<?php... $erreur = fopen (... echo "<script language='JavaScript'>"; echo "alert($erreur)"; echo "</script>";...?>

<?php... $erreur = fopen (... echo "<script language='JavaScript'>"; echo "alert($erreur)"; echo "</script>";...?>

erreurJS.phperreurJS.php

Page 53: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 53

Pour apprendre PHP, programmons…

• L’envoi d’un mail

• L’accès à un serveur LDAP

• Ecrire et lire des fichiers sur le serveur

• Un transfert de fichiers entre le client et le serveur

Page 54: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Envoyer un mail depuisEnvoyer un mail depuisun programme PHPun programme PHP

Page 55: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 55

Générer un mail

<?$pour = "Daniel CHARNAY <[email protected]>";$sujet = "Ecole Web-Services";$enTete = "From : Bill Gates <[email protected]>\n";$enTete = $enTete."CC : [email protected]\n";$contenu = "Bonjour,\nJe voudrais suivre cette formation SVP\n ";  $contenu = $contenu. "Cordialement,\nBill";mail($pour,$sujet,$contenu,$enTete);echo "Mail envoy&eacute; &agrave; $pour";?>

<?$pour = "Daniel CHARNAY <[email protected]>";$sujet = "Ecole Web-Services";$enTete = "From : Bill Gates <[email protected]>\n";$enTete = $enTete."CC : [email protected]\n";$contenu = "Bonjour,\nJe voudrais suivre cette formation SVP\n ";  $contenu = $contenu. "Cordialement,\nBill";mail($pour,$sujet,$contenu,$enTete);echo "Mail envoy&eacute; &agrave; $pour";?>

http://webtest.in2p3.fr/mail.phphttp://webtest.in2p3.fr/mail.php

Page 56: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Utiliser les services LDAPUtiliser les services LDAP

Page 57: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 57

Se connecter à un serveur LDAP -1

<HTML><HEAD><TITLE> recherche Ldap (formulaire) </TITLE></HEAD><BODY BGCOLOR="#e3e3e3" onLoad="document.recherche_ldap.onCherche.focus();"><form name="recherche_ldap" action="ldap.php"> Entrer les premiers caract&egrave;res du nom : <input name="onCherche" onBlur="if(this.value.length==0)alert('ca va etre long !')"> <input type="submit" value="chercher"></form></BODY></HTML>

<HTML><HEAD><TITLE> recherche Ldap (formulaire) </TITLE></HEAD><BODY BGCOLOR="#e3e3e3" onLoad="document.recherche_ldap.onCherche.focus();"><form name="recherche_ldap" action="ldap.php"> Entrer les premiers caract&egrave;res du nom : <input name="onCherche" onBlur="if(this.value.length==0)alert('ca va etre long !')"> <input type="submit" value="chercher"></form></BODY></HTML>

chldap.htmlchldap.html

Pourquoi Pourquoi

Page 58: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 58

Se connecter à un serveur LDAP -2

<?define ("SERVEUR_LDAP","ldap.in2p3.fr");define ("SCHEMA_LDAP","o=in2p3, c=fr");$onCherche = $onCherche."*";$connexion = ldap_connect(SERVEUR_LDAP);if ($connexion){ $reponse=ldap_bind($connexion); if ($reponse){ $chercher=ldap_search($connexion,SCHEMA_LDAP,"sn=$onCherche"); $resultat=ldap_get_entries($connexion,$chercher); print($resultat["count"]." r&eacute;ponses<p>"); for ($i=0; $i<$resultat["count"]; $i++){ print($resultat[$i]["cn"][0]." - <i>".$resultat[$i]["mail"][0]."</i><br>"); } }} else exit ("Connexion impossible &agrave; ".SERVEUR_LDAP);?>

<?define ("SERVEUR_LDAP","ldap.in2p3.fr");define ("SCHEMA_LDAP","o=in2p3, c=fr");$onCherche = $onCherche."*";$connexion = ldap_connect(SERVEUR_LDAP);if ($connexion){ $reponse=ldap_bind($connexion); if ($reponse){ $chercher=ldap_search($connexion,SCHEMA_LDAP,"sn=$onCherche"); $resultat=ldap_get_entries($connexion,$chercher); print($resultat["count"]." r&eacute;ponses<p>"); for ($i=0; $i<$resultat["count"]; $i++){ print($resultat[$i]["cn"][0]." - <i>".$resultat[$i]["mail"][0]."</i><br>"); } }} else exit ("Connexion impossible &agrave; ".SERVEUR_LDAP);?>

Etablie la connexion

Identification (anonyme)

recherche

Pointeur sur les résultats

sn : surname$resultat [indice] [clé] [valeur n]sn : surname$resultat [indice] [clé] [valeur n]

Il existe une cinquantaine de fonctions permettant de travailler avec une base LDAP !

Il existe une cinquantaine de fonctions permettant de travailler avec une base LDAP !

ldap.phpldap.php

Et si on avait voulu sortir par ordre alphabétique ?

Et si on avait voulu sortir par ordre alphabétique ?

Page 59: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Envoyer des fichiers vers un serveurEnvoyer des fichiers vers un serveur

Page 60: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 60

« upload » d’un fichier

• On se propose de transférer un fichier situé sur le poste du client vers le serveur

• C’est 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.

Page 61: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 61

La balise HTML <input type="file">

• Permet de « browser » le disque local pour sélectionner un fichier

• Permet « d’attacher » ce fichier à la suite des variables d’un formulaire, sous forme d’un message « multipart »

<HTML><HEAD><TITLE> transferer </TITLE></HEAD><BODY BGCOLOR="#e3e3e3"><form name="transferer" ENCTYPE="multipart/form-data" action="stocke.php" method="post"> <input name="monFichier" type="file"> <input type="submit" value="envoyer"></form></BODY></HTML>

<HTML><HEAD><TITLE> transferer </TITLE></HEAD><BODY BGCOLOR="#e3e3e3"><form name="transferer" ENCTYPE="multipart/form-data" action="stocke.php" method="post"> <input name="monFichier" type="file"> <input type="submit" value="envoyer"></form></BODY></HTML>

Le serveur doit récupérer le fichier à l’aide de ce programme

transférer.htmltransférer.html

Page 62: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 62

Sur le serveur…

• De même que l’on 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é

<?phpdefine ("WEB","http://localhost/CoursDebPHP/monDossier/");define ("HTDOCS","C:\\Program Files\\Apache Group\\Apache\\htdocs\\");//$dossier = HTDOCS."CoursDebPHP\\monDossier\\";//echo "Fichier original : ".$_FILES["monFichier"]["name"]."<br>";echo "Fichier temporaire : ".$_FILES["monFichier"]["tmp_name"]."<br>";echo "Taille du fichier : ".$_FILES["monFichier"]["size"]."octets";//copy ($_FILES["monFichier"]["tmp_name"],$dossier.$_FILES["monFichier"]["name"]);//echo "<p><a href=".WEB.$_FILES["monFichier"]["name"].">";echo "Voir le fichier transf&eacute;r&eacute;</a>";?>

<?phpdefine ("WEB","http://localhost/CoursDebPHP/monDossier/");define ("HTDOCS","C:\\Program Files\\Apache Group\\Apache\\htdocs\\");//$dossier = HTDOCS."CoursDebPHP\\monDossier\\";//echo "Fichier original : ".$_FILES["monFichier"]["name"]."<br>";echo "Fichier temporaire : ".$_FILES["monFichier"]["tmp_name"]."<br>";echo "Taille du fichier : ".$_FILES["monFichier"]["size"]."octets";//copy ($_FILES["monFichier"]["tmp_name"],$dossier.$_FILES["monFichier"]["name"]);//echo "<p><a href=".WEB.$_FILES["monFichier"]["name"].">";echo "Voir le fichier transf&eacute;r&eacute;</a>";?>

stocke.phpstocke.php

il n’y a ~ rien à faire !

Page 63: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 63

Exercice

• Télécharger un texte et stocker le serveur

• Proposer l’affichage de ce texte dans une page HTML en faisant surbriller toutes les zones de texte correspondant à un motif choisi par l’utilisateur

• Cet exercice permettra de manipuler des fonctions manipulant des fichiers

• Cet exercice permettra de poser le problème des sessions

Page 64: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 64

Correction -1

<html><head><style type="text/css">.sur {background-color : Yellow}</style></head><body bgcolor=#e3e3e3><form name=chMotif action=surbrille.php>motif &agrave; rechercher : <input name="motif"><input type="submit" value="chercher"><input type="hidden" name="leFichier"></form><hr><?phpdefine ("WEB","http://localhost/CoursDebPHP/monDossier/");define ("HTDOCS","C:\\Program Files\\Apache Group\\Apache\\htdocs\\");$dossier = HTDOCS."CoursDebPHP\\monDossier\\";

<html><head><style type="text/css">.sur {background-color : Yellow}</style></head><body bgcolor=#e3e3e3><form name=chMotif action=surbrille.php>motif &agrave; rechercher : <input name="motif"><input type="submit" value="chercher"><input type="hidden" name="leFichier"></form><hr><?phpdefine ("WEB","http://localhost/CoursDebPHP/monDossier/");define ("HTDOCS","C:\\Program Files\\Apache Group\\Apache\\htdocs\\");$dossier = HTDOCS."CoursDebPHP\\monDossier\\";

surbrille.php surbrille.php

Page 65: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 65

Correction -2

//Premier passage on vient du formulaire d’upload//if (isset($_FILES["monFichier"]["tmp_name"])){ $fichier = $dossier.$_FILES["monFichier"]["name"]; copy ($_FILES["monFichier"]["tmp_name"],$fichier); $fichier_2 = ereg_replace("\\\\","\\\\",$fichier); print("<script>document.chMotif.leFichier.value='$fichier_2';</script>"); $fd = fopen ($fichier,"r"); while (!feof ($fd)) { $ligne = fgets($fd, 256); echo $ligne."<br>"; } fclose ($fd);} else {

//Premier passage on vient du formulaire d’upload//if (isset($_FILES["monFichier"]["tmp_name"])){ $fichier = $dossier.$_FILES["monFichier"]["name"]; copy ($_FILES["monFichier"]["tmp_name"],$fichier); $fichier_2 = ereg_replace("\\\\","\\\\",$fichier); print("<script>document.chMotif.leFichier.value='$fichier_2';</script>"); $fd = fopen ($fichier,"r"); while (!feof ($fd)) { $ligne = fgets($fd, 256); echo $ligne."<br>"; } fclose ($fd);} else {

surbrille.php (suite) surbrille.php (suite)

Page 66: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 66

Correction -3

// Passage suivant on vient du formulair de saisie du motif//$fichier = $_REQUEST["leFichier"]; $fichier = ereg_replace("\\\\\\\\","\\",$fichier); $fd = fopen ($fichier,"r"); while (!feof ($fd)) { $ligne = fgets($fd, 256); $motif = $_REQUEST["motif"]; $ligne = ereg_replace($motif,"<span class='sur'>$motif</span>",$ligne); echo $ligne."<br>"; } fclose ($fd); $fichier_2 = ereg_replace("\\\\","\\\\",$fichier); print("<script>document.chMotif.leFichier.value='$fichier_2';</script>");

}?><hr><body></html>

// Passage suivant on vient du formulair de saisie du motif//$fichier = $_REQUEST["leFichier"]; $fichier = ereg_replace("\\\\\\\\","\\",$fichier); $fd = fopen ($fichier,"r"); while (!feof ($fd)) { $ligne = fgets($fd, 256); $motif = $_REQUEST["motif"]; $ligne = ereg_replace($motif,"<span class='sur'>$motif</span>",$ligne); echo $ligne."<br>"; } fclose ($fd); $fichier_2 = ereg_replace("\\\\","\\\\",$fichier); print("<script>document.chMotif.leFichier.value='$fichier_2';</script>");

}?><hr><body></html>

surbrille.php (suite et fin) surbrille.php (suite et fin)

Page 67: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Sessions et transactionsSessions et transactions

Page 68: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 ?

Page 69: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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 (<input type=hidden …)

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

Page 70: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 70

Construire une session

• On appelle la fonction session_start()

• On demande la conservation de variables au travers d’un tableau

associatif http_session_vars["ma_variable"]

• C'est tout ! (ou presque…)

<?phpsession_start();//verification dans la base //login et pwd sont valides...$HTTP_SESSION_VARS["utilisateur"]=$_REQUEST["login"];$HTTP_SESSION_VARS["pass_phrase"]=$_REQUEST["pwd"];....<form ... action="deux.php" ...

<?phpsession_start();//verification dans la base //login et pwd sont valides...$HTTP_SESSION_VARS["utilisateur"]=$_REQUEST["login"];$HTTP_SESSION_VARS["pass_phrase"]=$_REQUEST["pwd"];....<form ... action="deux.php" ...

un.php un.php <html>...<form ... action="un.php">Votre nom :<input name="login">Votre mot de passe : <input type=password name="pwd">...

<html>...<form ... action="un.php">Votre nom :<input name="login">Votre mot de passe : <input type=password name="pwd">...

test.htmltest.html

deux.php deux.php

Page 71: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 71

Détaillons …

<html><body bgcolor="#e3e3e3"><form name="tst" action="un.php" method="post">Votre code : <input name="login">Votre mot de passe : <input type="password" name="pwd"><input type="submit" value="me connecter"></form></body></html>

<html><body bgcolor="#e3e3e3"><form name="tst" action="un.php" method="post">Votre code : <input name="login">Votre mot de passe : <input type="password" name="pwd"><input type="submit" value="me connecter"></form></body></html>

<?session_start();$HTTP_SESSION_VARS["utilisateur"]=$_REQUEST["login"];$HTTP_SESSION_VARS["pass_phrase"]=$_REQUEST["pwd"];?><body bgcolor="#e3e3e3"><form name="tst2" action="deux.php" method="get"> entrer votre texte :<br> <textarea name="remarque"></textarea> <input type="submit" value="entrer"> </form></body></html>

<?session_start();$HTTP_SESSION_VARS["utilisateur"]=$_REQUEST["login"];$HTTP_SESSION_VARS["pass_phrase"]=$_REQUEST["pwd"];?><body bgcolor="#e3e3e3"><form name="tst2" action="deux.php" method="get"> entrer votre texte :<br> <textarea name="remarque"></textarea> <input type="submit" value="entrer"> </form></body></html>

un.php un.php

session.htmlsession.htmlutilisateur|s:4:"Emile";pass_phrase|s:6:"tagada";utilisateur|s:4:"Emile";pass_phrase|s:6:"tagada";

C:\temp\sess_ebd66a6730f0c63670f686a1fc69f1c1C:\temp\sess_ebd66a6730f0c63670f686a1fc69f1c1

écritureécriture

<INPUT TYPE="HIDDEN" NAME=PHPSESSID VALUE=ebd66… Introduit automatiquementIntroduit automatiquement

<?session_start();print ("Bonjour ".$HTTP_SESSION_VARS["utilisateur"]);print (" Votre mot de passe est : ".$HTTP_SESSION_VARS["pass_phrase"]);print (" merci pour votre remarque : ".$_REQUEST["remarque"]);session_destroy();?>

<?session_start();print ("Bonjour ".$HTTP_SESSION_VARS["utilisateur"]);print (" Votre mot de passe est : ".$HTTP_SESSION_VARS["pass_phrase"]);print (" merci pour votre remarque : ".$_REQUEST["remarque"]);session_destroy();?>

deux.php deux.php

Lecture :on utilise le PHPSESSID pour ouvrir le bon fichier

Page 72: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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

Page 73: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 73

Exercices

1. 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 !

2. Imaginer le compteur classique qui compte le nombre d'accès à une page

3. Imaginez comment limiter le temps de stationnement sur une page

Page 74: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 74

Correction : compter les accés

<?phpsession_start();if (!isset($HTTP_SESSION_VARS['compteur'])) $HTTP_SESSION_VARS['compteur']=1;else $HTTP_SESSION_VARS['compteur']++;?>Vous &ecirc;tes venu <font size="6" color ="red"><? echo $HTTP_SESSION_VARS['compteur'] ?></font> fois<form action=comptons.php><input type=submit value="continuer"></form>

<?phpsession_start();if (!isset($HTTP_SESSION_VARS['compteur'])) $HTTP_SESSION_VARS['compteur']=1;else $HTTP_SESSION_VARS['compteur']++;?>Vous &ecirc;tes venu <font size="6" color ="red"><? echo $HTTP_SESSION_VARS['compteur'] ?></font> fois<form action=comptons.php><input type=submit value="continuer"></form>

comptons.php comptons.php

Page 75: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 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']> MAXI_INACTIF

on sort en temps dépassé

Else

on stocke le nouveau temps et on continue

Page 76: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 76

Correction :

<?phpdefine ("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'])>MAX_INACTIF){ session_destroy(); die("Temps d&eacute;pass&eacute; !"); } $HTTP_SESSION_VARS['compteur']++; $HTTP_SESSION_VARS['temps']=time();}?>Vous &ecirc;tes venu <font size="6" color ="red"><? echo $HTTP_SESSION_VARS['compteur'] ?></font> fois<form action=limite.php><input type=submit value="continuer"> avant 10 secondes</form>

<?phpdefine ("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'])>MAX_INACTIF){ session_destroy(); die("Temps d&eacute;pass&eacute; !"); } $HTTP_SESSION_VARS['compteur']++; $HTTP_SESSION_VARS['temps']=time();}?>Vous &ecirc;tes venu <font size="6" color ="red"><? echo $HTTP_SESSION_VARS['compteur'] ?></font> fois<form action=limite.php><input type=submit value="continuer"> avant 10 secondes</form>

limite.php limite.php

Page 77: Cette présentation ainsi que les exemples de code sont disponibles à ecoles2p3.fr

Formation Webmasters- @dc 77

Pour les ouvrages allez chez www.amazone.fr , tapez PHP ou JavaScript ou HTML ou MySQL comme mot clé,listez les résultats par meilleures ventes : choisissez !

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 ..

.

ou chez Eyrolles ..

.