Cette prsentation ainsi que les exemples de code

  • Slides: 77
Download presentation
Cette présentation ainsi que les exemples de code sont disponibles à http: //ecoles. in

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

Construire des applications Web … …initiation à PHP, My. SQL, [Java. Script] Daniel. Charnay@in

Construire des applications Web … …initiation à PHP, My. SQL, [Java. Script] Daniel. Charnay@in 2 p 3. fr

HTML et HTML dynamique, rappels

HTML et HTML dynamique, rappels

Le modèle HTML statique Serveur WEB htdocs Fichier hello. html <html> Hello <body> Hello

Le modèle HTML statique Serveur WEB htdocs Fichier hello. html <html> Hello <body> Hello </body> </html> Formation Webmasters- @dc Internet 4 <html> <body> Hello </body> </html>

Le modèle HTML dynamique avec les CGI Serveur WEB Cgi-bin hello. execution <html> Hello

Le modèle HTML dynamique avec les CGI Serveur WEB Cgi-bin hello. execution <html> Hello <body> Hello </body> </html> %a#|^%%§!$¤ hello. c printf("<html>"); printf("<body>"); printf("<Hello>"); printf("</body>"); printf("</html>"); Formation Webmasters- @dc 5 compilation

Le modèle HTML dynamique avec un interpréteur Serveur WEB htdocs hello. php <html> Hello

Le modèle HTML dynamique avec un interpréteur Serveur WEB htdocs hello. php <html> Hello <body> Hello </body> </html> Internet printf("<html>"); printf("<body>"); printf("<Hello>"); printf("</body>"); printf("</html>"); Interprêteur Formation Webmasters- @dc 6

Présentation de l’application Web

Présentation de l’application Web

Fonctionnellement une application Web c’est : • Un formulaire inséré dans une page Web

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’IN 2 P 3 Ø Etc. Formation Webmasters- @dc 8

Techniquement une application Web c’est : • Une page Web contenant un formulaire HTML

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

Une application Web nécessite donc • Obligatoirement un serveur HTTP ! Ø Apache, (éventuellement

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 Ø My. Sql, Postgres ou Oracle, etc. • La possiblité de solliciter un interpréteur localisé sur le navigateur du client Ø Nestcape, IE et leur interpréteur commun : Java. Script Formation Webmasters- @dc 10

Scripts clients et scripts serveurs

Scripts clients et scripts serveurs

Scripts et scripts : distinguons bien… • Ce qui est exécuté sur le serveur

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 Java. Script Ø Tout comme les applets (Java), les Activ. X, 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, … Formation Webmasters- @dc 12

Types de scripts • La programmation en Java. Script est de type événementielle. On

Types de scripts • La programmation en Java. Script 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 Formation Webmasters- @dc 13

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

Choisissons … • Ce qui va s’exécuter sur le navigateur … • Et ce qui va s’exécuter sur le serveur Formation Webmasters- @dc 14 Ou sur les deux ?

Recommandations • Si vous faites un contrôle de saisie Ø Vous pouvez utiliser Java.

Recommandations • Si vous faites un contrôle de saisie Ø Vous pouvez utiliser Java. Script sur le client u Avantage : rapidité, instantanéité, sanction immédiate, pas d’accès réseau u 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 u Avantage : impossible de court-circuiter le contrôle u Inconvénient : accès serveur, pas de contrôle pas à pas possible, sanction a posteriori Ø Vous pouvez utiliser les deux u Avantage : rapidité et contrôle temps réel u Inconvénient : double codage Formation Webmasters- @dc 15

Exercice • Une calculette € : Par qui allez-vous faire effectuer la conversion ?

Exercice • Une calculette € : Par qui allez-vous faire effectuer la conversion ? Ø Par du code Java. Script sur le navigateur ? Ø Par du code PHP sur le serveur ? • Et un script qui affiche l’heure ? Ø Navigateur ou serveur ? Formation Webmasters- @dc 16

Quels langages ?

Quels langages ?

Combien de langages pour le programmeur 2, 3 ou 4 ? • On considère

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 Java. Script Formation Webmasters- @dc 18

Les langages • 2 langages de programmation : PHP et Java. Script Ø Syntaxe

Les langages • 2 langages de programmation : PHP et Java. Script Ø Syntaxe proche du C, de Java, de Perl Ø Les codes sont insérés dans la page HTML u Le code PHP est interprété sur le serveur avant l’envoi de la page – Le code PHP n’est donc pas visible u 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 Formation Webmasters- @dc 19

Initiation à PHP • PHP : Personnal Home Page ? • PHP : Hypertext

Initiation à PHP • PHP : Personnal Home Page ? • PHP : Hypertext Pre. Processor ? • Créé par Rasmus Ledorf en 1994

Caractéristiques du langage • Le langage de scripting du Web : un standard de

Caractéristiques du langage • Le langage de scripting du Web : un standard de fait ! • Facile à apprendre et à utiliser • Excellent support des SGBD (Oracle, MS, My. Sql, DB 2…) • 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, Mac. Os Formation Webmasters- @dc 21

Insérer du code PHP • Directement dans le code HTML • En remplaçant l’extension.

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> Le code PHP est interprêté sur le serveur avant d’être envoyé au client Formation Webmasters- @dc 22 Fichier test. php sur le serveur <html> <head>. . . </head> <body>. . . Code envoyé au client <html> <? <head> echo "Hello le monde !"; . . . </head> ? > <body>. . . Hello le monde !. . .

info. php Premier programme <? phpinfo(); ? > • Editer ce programme • Copier

info. php Premier programme <? phpinfo(); ? > • 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 … Formation Webmasters- @dc 23

Le langage • Syntaxe héritée du C : Ø Méme séparateur pour les instructions

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… u Des entiers : 123, -24, 0677 (octal), 0 x 456 (hexa) u Des flottants : 12. 34, 1. 2 e 3 u Un booléen : true ou false u Une chaîne de caractères ’hello le monde’ u. . . Formation Webmasters- @dc 24

Les variables • Une variable en PHP commence par le caractère $ Ø $_nom,

Les variables • Une variable en PHP commence par le caractère $ Ø $_nom, $index, $k 2, $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 Formation Webmasters- @dc 25

Transtypage ou casting • (int), (integer) - type entier • (bool), (boolean) - booléen

Transtypage ou casting • (int), (integer) - type entier • (bool), (boolean) - booléen • (real), (double), (float) - type double casting. php <? php $test = "1945"; echo gettype($test); $test = (bool) $test; echo gettype($test); echo ($test); ? > • (string) - type chaîne • (array) - type tableau • (object) - type objet Formation Webmasters- @dc Ça imprime quoi ? 26

Interprétation • Une chaîne de caractères est définie entre simple quote 'ou entre double

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 "; affiche echo $politesse; Bonjour Mme Vargas Imprime : Bonjour Mme Vargas $politesse = 'Bonjour Mme $nom '; echo $politesse; affiche Imprime : Bonjour Mme $nom Formation Webmasters- @dc 27

Variable static • Mais, dans une Comme en C, la variable ne perd pas

Variable static • Mais, dans une Comme en C, la variable ne perd pas sa valeur à chaque appel du seule exécution du programme ! bloc • Utilisé dans un contexte récursif function compte(){ static $compteur = 0; $compteur++; while ($compteur <10){echo $compteur; compte(); } } affiche compte(); affiche : 123456789 Formation Webmasters- @dc 28

Définition de constantes • L'habitude est d'écrire les constantes en majuscules • Lorsque l'on

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 ("IN 2 P 3", "http: //www. in 2 p 3. fr"); print ("<a href=". IN 2 P 3. ">web in 2 p 3</a>"); Formation Webmasters- @dc 29

Inclusion de fichiers : request et include • Les fichiers importés étant supposés de

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 database. php <? php define ("HOST", "ccmysql. in 2 p 3. fr"); define ("USER", "le. User"); define ("PWD", "le. Mot. De. Passe"); define ("BD", "resa"); ? > <? php include ('database. php'); $cx. DB=mysql_connect(HOST, USER, PWD); if (!$cx. DB){ ? > Formation Webmasters- @dc 30

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

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"]. " "); print ($_SERVER["HTTP_USER_AGENT"]. " "); print ($_SERVER["HTTP_REFERER"]. " "); ? > Formation Webmasters- @dc 31

Tableaux • Tableau nominatif $labo = array('ccin 2 p 3', ‘Lyon', '51'); print ($labo[0]);

Tableaux • Tableau nominatif $labo = array('ccin 2 p 3', ‘Lyon', '51'); print ($labo[0]); • affiche ccin 2 p 3 Tableau associatif $labo = array(nom=>'ccin 2 p 3', ville=>'Lyon', agents=>'51'); print ($labo['ville']); affiche Lyon • 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 Formation Webmasters- @dc 32

Syntaxe du langage • Tout le monde connaît ? On n’en parle pas, c’est

Syntaxe du langage • Tout le monde connaît ? On n’en parle pas, c’est comme le C … Ø Méme structure de contrôle u for, if then else, do, while, switch, foreach, break, continue, … Ø Mémes opérateurs mathématiques u + - / * % += ++ -Ø Mêmes opérateurs logiques u && | | ! Ø Mêmes opérateurs de comparaison u == != > < <= >= • …sauf pour la concaténation où on utilise le point. $nom = "Adamberg"; $salutation = "Bonjour Monsieur ". $nom; echo $salutation; affiche Bonjour Monsieur Adamberg affiche : Bonjour Monsieur Adamberg Formation Webmasters- @dc 33

function ttc($montant. HT){ $taux = 1. 186; return $montant. HT * $taux; } …

function ttc($montant. HT){ $taux = 1. 186; return $montant. HT * $taux; } … $montant. TTC = ttc($somme); Fonction utilisateur • Il est possible d'avoir des paramètres optionnels (comme en c++) function identite($sexe="masculin", $langue="francais"). . . Formation Webmasters- @dc 34

Bibliothèques de fonctions • La distribution PHP intègre des centaines de fonctions pour tout

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

Portée des variables • La portée d’une variable dépend du contexte dans lequel elle

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 jamais. Test(){ global $nom; Tiens ! pourquoi ça imprime global $prenom; pas "Fred Vargas écrivain" $prenom = "Fred"; ? $titre = "é crivain"; } jamais. Test(); affiche echo "$prenom $titre"; imprime : Fred Vargas Formation Webmasters- @dc 36

Construire une application

Construire une application

Un formulaire … <form name=resa action=resa. php… <select name=objet> <input name=email> <select name=annee <input

Un formulaire … <form name=resa action=resa. php… <select name=objet> <input name=email> <select name=annee <input name=commentaire> <input name=titre> <input type=submit> <a href=# on. Click= document. forms[0]. date. value=28> 28</a> <input type=hidden name=date> </form> Formation Webmasters- @dc 38

Traitement du formulaire • Le formulaire est décrit dans une page HTML qui peut

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

Récupération de la valeur des champs -1 test. html <html> <form name=xyz action=test. php>

Récupération de la valeur des champs -1 test. html <html> <form name=xyz action=test. php> Pré nom : <input name=prenom> </form> </html> test. php <? echo "Bonjour". $prenom; ? > Cette méthode n’est possible que si register_globals = on dans le fichier de configuration de l’interpréteur PHP (php. ini) Formation Webmasters- @dc 40

Récupération de la valeur des champs -2 • Pour des raisons de sécurité, la

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 $_REQUEST nom Adamsberg prenom Jean-Baptiste email Jba@chemins. Nocturnes. fr $_REQUEST["prenom"] = Jean-Baptiste Formation Webmasters- @dc 41

Récupération de la valeur des champs -3 test. html <html> <form name=xyz action=test. php>

Récupération de la valeur des champs -3 test. html <html> <form name=xyz action=test. php> Pré nom : <input name=prenom> </form> </html> test. php <? $prenom = $_REQUEST["prenom"]; echo "Bonjour". $prenom; ? > Cette méthode fonctionne quelque soit la méthode (GET ou POST) choisie pour la transmission du formulaire. Formation Webmasters- @dc 42

N’oubliez pas ! • L’exécution du programme PHP sur le serveur … Ø Effectue

N’oubliez pas ! • L’exécution du programme PHP sur le serveur … Ø Effectue un certain nombre d’actions… u 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 u Message de confirmation, d’erreurs, résultats divers, etc. u Si on ne génère pas de code HTML le résultat retourné est … une page vide ! Formation Webmasters- @dc 43

Avant de faire des exercices … xxx. in 2 p 3. fr yyy. in

Avant de faire des exercices … xxx. in 2 p 3. fr yyy. in 2 p 3. fr Serveur WEB (Apache) SGBD My. SQL Interpréteur PHP HTDOCS. html . php Réseau Formation Webmasters- @dc 44

Exercice • Tester « request. html » et « request. php » Ø Vérifier

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 u En appelant directement le PHP u En passant par le formulaire HTML Ø Faites la différence entre une variable non définie et une variable vide request. html <html> <form name=xyz action=request. php method=post> Mail : <input name=mail> </form> </html> Formation Webmasters- @dc request. php <? if (isset($_REQUEST["mail"])){ $mail = $_REQUEST["mail"]; print (" Adresse mail : $mail"); }else{ print ("<p>mail non dé fini !"); } ? > 45

A propos de cet exercice • Imaginons que le champ « mail » soit

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 Java. Script ? u 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é. Formation Webmasters- @dc 46

La page HTML avec un script « client » lire. Mail. html <html> <head>

La page HTML avec un script « client » lire. Mail. html <html> <head> <script> //java. Script function verif. Mail(){ if (document. forms[0]. mail. value. length < 6 || document. forms[0]. mail. value. index. Of("@") < 0 || document. forms[0]. mail. value. index. Of(". ") < 0) { alert ("mail incorrect"); return false; } } </script> </head><body> <form name="xyz" action= "recevoir. Mail. php" method="post" on. Submit="return verif. Mail(); " > Bloque l’appel au programme PHP en cas d’erreur Mail : <input name="mail"> </form> </body></html> Formation Webmasters- @dc 47

Le script serveur PHP recevoir. Mail. php <? if (isset($_REQUEST["mail"])){ $mail = $_REQUEST["mail"]; if

Le script serveur PHP recevoir. Mail. 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=lire. Mail. html>recommencez</a>"); } else { print ("Adresse mail : $mail"); } }else{ print ("<h 1>INTERDIT !"); } ? > Au fait ! Dans quel cas passe-t-on dans cette branche ? Formation Webmasters- @dc 48

Conclusion • Tester côté client est plus ergonomique Ø Sanction immédiate, pas de nécessité

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 (on. Blur, on. Focus)… 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 ! Formation Webmasters- @dc 49

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

Le formulaire est-il toujours issu d’une page HTML statique ? Non ! le formulaire est ici généré en PHP, les options de ce « select » sont issues d’une requête à une base de données Formation Webmasters- @dc 50

Un seul fichier ! remarque. php <HTML><HEAD><TITLE> tout en un </TITLE> <script langage=javascript> mail

Un seul fichier ! remarque. php <HTML><HEAD><TITLE> tout en un </TITLE> <script langage=javascript> mail = /^[a-z. A-Z 0 -9]+[a-z. A-Z 0 -9. -_]+@(([a-z. A-Z 0 -9-])+. )+([a-z. A-Z 0 -9])+$/; function s. Mail(){ ok=mail. test(document. forms[0]. elements[1]. value) if (!ok){ alert ("adresse mail invalide !"); return false; } } </script> </HEAD><BODY BGCOLOR="#e 3 e 3 e 3"> <? PHP Remarquez l'allée venue entre if ( !isset($_REQUEST["mail"])){ ? > le code PHP et HTML et le <form name=remarque action=remarque. php method=post conditionnement de ce dernier on. Submit="return s. Mail(); "> par le if(… Votre commentaire : <textarea name=texte></textarea> Votre e-mail ? <input name=mail><input type=submit value="envoyer"> </form> <? } else { print ("Merci de votre commentaire "); print ("Nous vous ré pondrons à ". $_REQUEST["mail"]); } ? > </BODY></HTML> Formation Webmasters- @dc 51

Code dans code • Bien sûr, comme PHP génère du HTML, il peut aussi

Code dans code • Bien sûr, comme PHP génère du HTML, il peut aussi générer du Java. Script ! erreur. JS. php <? php. . . $erreur = fopen (. . . echo "<script language='Java. Script'>"; echo "alert($erreur)"; echo "</script>"; . . . ? > Formation Webmasters- @dc 52

Pour apprendre PHP, programmons… • L’envoi d’un mail • L’accès à un serveur LDAP

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

Envoyer un mail depuis un programme PHP

Envoyer un mail depuis un programme PHP

Générer un mail http: //webtest. in 2 p 3. fr/mail. php <? $pour =

Générer un mail http: //webtest. in 2 p 3. fr/mail. php <? $pour = "Daniel CHARNAY <charnay@in 2 p 3. fr>"; $sujet = "Ecole Web-Services"; $en. Tete = "From : Bill Gates <bgates@microsoft. fr>n"; $en. Tete = $en. Tete. "CC : Steve@apple. comn"; $contenu = "Bonjour, n. Je voudrais suivre cette formation SVPn "; $contenu = $contenu. "Cordialement, n. Bill"; mail($pour, $sujet, $contenu, $en. Tete); echo "Mail envoyé à $pour"; ? > Formation Webmasters- @dc 55

Utiliser les services LDAP

Utiliser les services LDAP

Se connecter à un serveur LDAP -1 chldap. html <HTML><HEAD><TITLE> recherche Ldap (formulaire) </TITLE></HEAD>

Se connecter à un serveur LDAP -1 chldap. html <HTML><HEAD><TITLE> recherche Ldap (formulaire) </TITLE></HEAD> <BODY BGCOLOR="#e 3 e 3 e 3" on. Load="document. recherche_ldap. on. Cherche. focus(); "> Pourquoi <form name="recherche_ldap" action="ldap. php"> Entrer les premiers caractè res du nom : <input name="on. Cherche" on. Blur="if(this. value. length==0)alert('ca va etre long !')"> <input type="submit" value="cher"> </form> </BODY></HTML> Formation Webmasters- @dc 57

Se connecter à un serveur LDAP -2 ldap. php <? define ("SERVEUR_LDAP", "ldap. in

Se connecter à un serveur LDAP -2 ldap. php <? define ("SERVEUR_LDAP", "ldap. in 2 p 3. fr"); Il existe une define ("SCHEMA_LDAP", "o=in 2 p 3, c=fr"); cinquantaine de $on. Cherche = $on. Cherche. "*"; fonctions permettant $connexion = ldap_connect(SERVEUR_LDAP); Etablie la connexion de travailler avec une if ($connexion){ base LDAP ! Identification (anonyme) $reponse=ldap_bind($connexion); if ($reponse){ $cher=ldap_search($connexion, SCHEMA_LDAP, "sn=$on. Cherche"); recherche $resultat=ldap_get_entries($connexion, $cher); Pointeur sur les résultats print($resultat["count"]. " ré ponses<p>"); for ($i=0; $i<$resultat["count"]; $i++){ print($resultat[$i]["cn"][0]. " - <i>". $resultat[$i]["mail"][0]. "</i> "); }Et si on avait } voulu sortir par } else exit ("Connexion impossible à ". SERVEUR_LDAP); ordre alphabétique ? ? > sn : surname $resultat [indice] [clé] [valeur n] Formation Webmasters- @dc 58

Envoyer des fichiers vers un serveur

Envoyer des fichiers vers un serveur

 « upload » d’un fichier • On se propose de transférer un fichier

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

La balise HTML <input type="file"> • Permet de « browser » le disque local

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 » transférer. html <HTML><HEAD><TITLE> transferer </TITLE></HEAD> <BODY BGCOLOR="#e 3 e 3 e 3"> <form name="transferer" ENCTYPE="multipart/form-data" Le serveur doit récupérer le fichier à l’aide de ce programme action="stocke. php" method="post"> <input name="mon. Fichier" type="file"> <input type="submit" value="envoyer"> </form> </BODY> </HTML> Formation Webmasters- @dc 61

il n’y a ~ rien à faire ! Sur le serveur… • De même

il n’y a ~ rien à faire ! Sur le serveur… • De même que l’on a utilisé $_REQUEST pour les données du stocke. php <? php formulaire … define ("WEB", "http: //localhost/Cours. Deb. PHP/mon. Dossier/"); define ("HTDOCS", "C: \Program Files\Apache Group\Apache\htdocs\"); On va utiliser $_FILES pour récupérer dans ce tableau associatif // Ø Le nom original du fichier (nom sur le poste client) $dossier = HTDOCS. "Cours. Deb. PHP\mon. Dossier\"; // Ø Le nom temporaire (nom du fichier stocké dans un répertoire temporaire echo "Fichier original : ". $_FILES["mon. Fichier"]["name"]. " "; défini dans le php. ini) echo "Fichier temporaire : ". $_FILES["mon. Fichier"]["tmp_name"]. " "; echo "Taille du fichier : ". $_FILES["mon. Fichier"]["size"]. "octets"; Ø La taille du fichier transféré // copy ($_FILES["mon. Fichier"]["tmp_name"], $dossier. $_FILES["mon. Fichier"]["name"]); // echo "<p><a href=". WEB. $_FILES["mon. Fichier"]["name"]. ">"; echo "Voir le fichier transfé ré </a>"; ? > • Formation Webmasters- @dc 62

Exercice • Télécharger un texte et stocker le serveur • Proposer l’affichage de ce

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

Correction -1 surbrille. php <html><head> <style type="text/css">. sur {background-color : Yellow}</style> </head><body bgcolor=#e 3

Correction -1 surbrille. php <html><head> <style type="text/css">. sur {background-color : Yellow}</style> </head><body bgcolor=#e 3 e 3 e 3> <form name=ch. Motif action=surbrille. php> motif à recher : <input name="motif"> <input type="submit" value="cher"> <input type="hidden" name="le. Fichier"> </form> <hr> <? php define ("WEB", "http: //localhost/Cours. Deb. PHP/mon. Dossier/"); define ("HTDOCS", "C: \Program Files\Apache Group\Apache\htdocs\"); $dossier = HTDOCS. "Cours. Deb. PHP\mon. Dossier\"; Formation Webmasters- @dc 64

Correction -2 surbrille. php (suite) //Premier passage on vient du formulaire d’upload // if

Correction -2 surbrille. php (suite) //Premier passage on vient du formulaire d’upload // if (isset($_FILES["mon. Fichier"]["tmp_name"])){ $fichier = $dossier. $_FILES["mon. Fichier"]["name"]; copy ($_FILES["mon. Fichier"]["tmp_name"], $fichier); $fichier_2 = ereg_replace("\\", $fichier); print("<script>document. ch. Motif. le. Fichier. value='$fichier_2'; </script>"); $fd = fopen ($fichier, "r"); while (!feof ($fd)) { $ligne = fgets($fd, 256); echo $ligne. " "; } fclose ($fd); } else { Formation Webmasters- @dc 65

Correction -3 surbrille. php (suite et fin) // Passage suivant on vient du formulair

Correction -3 surbrille. php (suite et fin) // Passage suivant on vient du formulair de saisie du motif // $fichier = $_REQUEST["le. Fichier"]; $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. " "; } fclose ($fd); $fichier_2 = ereg_replace("\\", $fichier); print("<script>document. ch. Motif. le. Fichier. value='$fichier_2'; </script>"); } ? > <hr><body></html> Formation Webmasters- @dc 66

Sessions et transactions

Sessions et transactions

Les transactions sur le Web • Le problème Ø Vous vous connectez sur le

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

Le mécanisme de sessions • Le mode « déconnecté » du Web impose, si

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 u Dans ce cas, de page en page, on ne transmet qu'un identifiant, celuici étant géré automatiquement par le système u On peut aussi éventuellement utiliser un cookie pour s'identifier Formation Webmasters- @dc 69

Construire une session • On appelle la fonction session_start() • On demande la conservation

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…) test. html <html>. . . <form. . . action="un. php"> Votre nom : <input name="login"> Votre mot de passe : <input type=password name="pwd">. . . Formation Webmasters- @dc un. php <? php session_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". . . 70 deux. php

Détaillons … C: tempsess_ebd 66 a 6730 f 0 c 63670 f 686 a

Détaillons … C: tempsess_ebd 66 a 6730 f 0 c 63670 f 686 a 1 fc 69 f 1 c 1 session. html utilisateur|s: 4: "Emile"; pass_phrase|s: 6: "tagada"; <html><body bgcolor="#e 3 e 3 e 3"> écriture <form name="tst" action="un. php" method="post"> Votre code : <input name="login"> un. php <? Votre mot de passe : session_start(); <input type="password" name="pwd"> $HTTP_SESSION_VARS["utilisateur"]=$_REQUEST["login"]; <input type="submit" value="me connecter"> $HTTP_SESSION_VARS["pass_phrase"]=$_REQUEST["pwd"]; </form></body></html> ? > <body bgcolor="#e 3 e 3 e 3"> <form name="tst 2" action="deux. php" method="get"> deux. php entrer votre texte : <textarea name="remarque"></textarea> <? <input type="submit" value="entrer"> session_start(); Lecture : on utilise le PHPSESSID pour ouvrir le bon fichier <INPUT TYPE="HIDDEN" NAME=PHPSESSID VALUE=ebd 66… print ("Bonjour ". $HTTP_SESSION_VARS["utilisateur"]); Introduit automatiquement </form></body></html> print (" Votre mot de passe est : ". $HTTP_SESSION_VARS["pass_phrase"]); print (" merci pour votre remarque : ". $_REQUEST["remarque"]); session_destroy(); ? > Formation Webmasters- @dc 71

Attention ! • A ne jamais mettre quelque chose avant l'instruction session_start ! Ø

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

Exercices 1. Faire un système qui compte combien de fois VOUS accédez à une

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

Correction : compter les accés comptons. php <? php session_start(); if (!isset($HTTP_SESSION_VARS['compteur'])) $HTTP_SESSION_VARS['compteur']=1; else

Correction : compter les accés comptons. php <? php session_start(); if (!isset($HTTP_SESSION_VARS['compteur'])) $HTTP_SESSION_VARS['compteur']=1; else $HTTP_SESSION_VARS['compteur']++; ? > Vous ê tes venu <font size="6" color ="red"> <? echo $HTTP_SESSION_VARS['compteur'] ? > </font> fois <form action=comptons. php> <input type=submit value="continuer"> </form> Formation Webmasters- @dc 74

Le stationnement limité ou la déconnexion automatique d'une application • Définir une constante de

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

Correction : limite. php <? php define ("MAX_INACTIF", 10); session_start(); if (!isset($HTTP_SESSION_VARS['compteur'])){ $HTTP_SESSION_VARS['compteur']=1; $HTTP_SESSION_VARS['temps']=time();

Correction : limite. php <? 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'])>MAX_INACTIF){ session_destroy(); die("Temps dé passé !"); } $HTTP_SESSION_VARS['compteur']++; $HTTP_SESSION_VARS['temps']=time(); } ? > Vous ê 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> Formation Webmasters- @dc 76

URL's et ouvrages F www. php. net (en) F dev. nexen. net (en) F

URL's et ouvrages F www. php. net (en) F dev. nexen. net (en) F www. zend. net (en) F www. phpfrance. com (fr) F www. ilovephp. com (fr) Pour les ouvrages allez chez www. amazone. fr , tapez PHP ou Java. Script ou HTML ou My. SQL comme mot clé, listez les résultats par meilleures ventes : choisissez ! Formation Webmasters- @dc 77 ou chez Eyrolles. . .