La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Formulaires, CGI et PHP David Gross-Amblard (CNAM-Vertigo/Cédric) Transparents originaux : Philippe Rigaux Projet 3I 31.10.2001.

Présentations similaires


Présentation au sujet: "Formulaires, CGI et PHP David Gross-Amblard (CNAM-Vertigo/Cédric) Transparents originaux : Philippe Rigaux Projet 3I 31.10.2001."— Transcription de la présentation:

1 Formulaires, CGI et PHP David Gross-Amblard (CNAM-Vertigo/Cédric) dgram@cnam.fr Transparents originaux : Philippe Rigaux Projet 3I 31.10.2001

2 Plan zLe langage PHP yprincipe ysyntaxe zApplications de PHP yformulaires HTML, interaction avec Php yProduction automatique de documents HTML y(Gestion de sessions : les cookies en Php)

3 Informations zwww.php.net : la référence zwww.easyphp.org : un paquetage complet sous windows zDe très nombreux scripts sur le web : forums, agenda, jeux, … prêt-à-servir.

4 Le langage PHP

5 PHP, qu'est-ce que c'est ? zUn langage pour la programmation du serveur zPermet d'inclure des parties programmées dans du HTML zTrès proche du langage C zTrès riche en fonctions, notamment pour l'accès aux bases de données

6 Petit exemple PHP : toto.php Bonjour Quelle heure est-il ? Il est exactement

7 Comment ça marche Navigateur Programme serveur Interprêteur PHP Exécution des instructions PHP machine serveur Requête HTTP : toto.php Document HTML Fichier toto.php HTML/PHP

8 Ce que renvoit le serveur Bonjour Quelle heure est-il ? Il est exactement 19:38:5 Le navigateur ne voit que du HTML !

9 Syntaxe de PHP zCommentaires y/*... */ ou //... ou #... zVariables yUn '$', puis (au moins) une lettre, puis tout ce qu'on veut. yAttention : distinction minuscules/majuscules zConstantes ydefine (PI, 3.14116)

10 Déclaration de variables, types zPas de déclaration de variable en PHP ! L'apparition d'un nouveau symbole préfixé par '$' entraîne la création d'une variable Ex : $maVariable = 1; yLa valeur initiale est '''' ou 0 selon le contexte zLe typage est dynamique yUne même variable peut être utilisée pour stocker plusieurs types de données yDes conversions sont appliquées quand c'est nécessaire.

11 Types scalaires Les entiers $i = 1; Les flottants $i = 1.12; Les chaînes de caractère $i = "Je suis une chaîne"; Booléen $i = true; yNB: 0 false, tout le reste vaut true.

12 A propos des chaînes de caractères Apostrophes simples : mise en page quelconque. $c = 'Je suis une chaîne de caractères'; Apostrophes doubles : possibilité d'inclure des variables $nom = "Phileas Fogg"; $c = "Je m'appelle $nom";

13 Production de HTML On écrit avec echo ou printf zDes chaînes et/ou des variables zEn utilisant la concaténation, '.' $nom = "Fogg"; $nb = 3; echo "Je m'appelle $nom". "et je prends le métro ". $nb. " fois par jour";

14 Tableaux zTableaux indicés : liste de valeurs indicées par 0, 1, 2,... $tab[0] = 1; $tab[1] = "une chaîne"; zTableaux associatifs : liste de valeurs référencées par des clés $MES["Vertigo"]="Hitchcock"; $MES ["Gladiator"]="Scott";

15 Initialisation d'un tableau Avec array : Indicé: $tab = array("e1","el2",120); Associatif: $mes=array("Vertigo"=>"Hitchcock", "Gladiator" => "Scott"); zImplicitement (utile pour les formulaires) $tab[] = "el1"; $tab[] = "el2"; $tab[] = 120;

16 Parcours d'un tableau zTableau indicé : en incrémentant l'indice for ($i=0; $i < count($tab); $i++) echo "Element $i =". $tab[$i]; zTableau associatif : avec des fonctions yUn curseur sur le tableau est déplacé avec next ou prev yLes fonctions key et current renvoient les données du curseur. do{ echo "Clé :.key($mes). élément :.current($mes); } while (next($mes));

17 Expressions zExpression = tout ce qui a une valeur. yEn PHP, comme en C, presques toutes les instructions ont une valeur. 10; $i = 10; $i; yL'affectation a elle-même une valeur, donc on peut écrire $j = $i = 10;

18 Opérateurs zOpérateurs arithmétiques: +, -, *, / $i = 20; $i = ($i + 2) * 34; zComparaisons : ==,, = $i == 20; $j == $j - 1; zOpérateurs logiques: && (and) || (or) ! (not) ($i == 20 && $j = j-1) zConcaténation de chaînes $c1 = "Phileas"; $c2 = "Fogg"; $nom = $c1. " ". $c2;

19 Facilités syntaxiques zExpressions équivalentes : $i = $i + 20; $i += $20; yValable pour tous les opérateurs $nom = "Phileas "; $nom. = "Fogg"; zIncrémentations Au lieu de $i=$i+1, on écrit $i++ ou ++$i; yValeur de l'expression ?

20 Structures de contrôle : tests if (expression) { // bloc si expression != 0 } else { // bloc si expression = 0 } Rappel: expression = tout ce qui produit une valeur ! zLes if-then-else peuvent s'imbriquer.

21 Structures de contrôle : switch switch (expression) { case val1: // bloc si expression==val1 break; case val2: // bloc si expression==val1 break;... default: // tout a échoué break; }

22 Boucles : do et while while (expression) { // bloc tant que expression!=0 } zA un moment donné, expression doit devenir 0 ! do { // bloc tant que expression!=0 } while (expression) zNB : le bloc s'exécute au moins une fois

23 Boucles : for $i = 0; while ($i < 5) { // bloc $i++; } zPeut être remplacé par : for ($i=0; $i<5; $i++) {bloc}; zNB : on peut faire des choses très compliquées.

24 Instructions break et continue L'instruction break permet de sortir du corps d'une boucle. L'instruction continue force le passage à l'itération suivante. $i = 0; while (1) { if (++$i == 5) break; if ($i == 3) continue; // instructions }

25 Fonctions: passage des arguments function Addition ($i, $j) { // NB :$i et $j sont des variables locales $somme = $i + $j; $i = 2; $j = 3; return $somme; } $i = 1; $j = 1; // Appel de la fonction, passage par valeur $k = Addition ($i, $j); // $i et $j valent toujours 1 !

26 Fonctions: passage par adresse $i = 1; $j = 1; // Appel de la fonction, passage par valeur $k = Addition (&$i, &$j); // $i et $j valent 2 et 3 ! zEn préfixant par '&', on passe une variable par adresse. zIntroduit un effet de bord si la fonction modifie ses arguments : très mauvais

27 Passage par adresse avec déclaration function Addition ($i, $j, &$somme) { $somme = $i + $j; $i = 2; $j = 3; } $i = 1; $j = 1; // Appel de la fonction, passage par adresse de $k Addition ($i, $j, $k); // $i et $j valent toujours 1, $k vaut 2

28 Valeurs par défaut zIl est possible de donner une valeur par défaut aux arguments: très pratique function Connexion ($nom=gross", $passe="mdp", $serveur="cortes") { // instructions }... // Connexion à cortes Connexion (); // Connexion de Amman à cortes Connexion ("amann","mdp2"); // Connexion à cartier Connexion ("gross","mdp","cartier")

29 Fonctions et variables : conseil du jour zBon principe : une fonction n'accède pas aux variables du programme appelant, et réciproquement yVariables automatiques : apparaissent et disparaissent avec la fonction => très bon yVariables statiques : locales à la fonction, mais persistantes entre deux appels => bon yVariables globales : visibles partout => TRES MAUVAIS. z=> Se limiter aux variables automatiques

30 Application : formulaires HTML

31 Formulaires HTML: zUn conteneur pour les champs de saisie: yACTION est l'URL du script ou du programme à déclencher (en principae, sur le serveur) yMETHOD est GET ou POST (meilleur)

32 Exemple : un formulaire HTML (démo)démo Paramètres pour la recherche de films : Titre : Année début : Année fin :

33 Transmission zChaque champ a un nom zGET : les données sont transmises dans l URL http://cortes.cnam.fr:8080/action.php?titre=alien& anMin=1950&anMax=2001 zPOST : transmission dans le protocole HTTP (invisible sur l URL)

34 Champs de formulaire : Très général: saisie de texte, ou choix dans des listes. L'attribut TYPE vaut: TEXT pour les chaînes de caractères HIDDEN pour les champs cachés CHECKBOX pour un choix multiple RADIOBOX pour un choix exclusif SUBMIT pour déclencher l'action FILE pour transmettre un fichier

35 Champs zPermet de choisir une ou plusieurs valeurs dans une liste Alfred Hitchcock Maurice Pialat Quentin Tarantino L'option MULTIPLE permet de sélectionner plusieurs valeurs

36 Champ zPour entrer du texte libre: Résumé du film L'attribut MAXLENGTH indique la longueur maximale du text.

37 Un formulaire complet (démo)démo <FORM ACTION="http://cortes.cnam.fr:8080/ExPHP1.php" METHOD=POST > Titre : Année : Comédie : Drame : Histoire : Suspense : France : Etats-Unis : Allemagne : Japon : Affiche du film :

38 Un formulaire complet (suite) Metteur-en-scène : Alfred Hitchcock Maurice Pialat Quentin Tarantino Akira Kurosawa John Woo Tim Burton Résumé: Résumé Votre choix

39 Traitement des données en PHP zOn récupère, sous forme de variable PHP, les champs d'un formulaire yPour les valeurs scalaires -> un variable yPour les fichiers -> un nom de fichier temporaire

40 Que se passe-t-il quand on valide ? Le programme client transmet au programme serveur les infos sous la forme: titre=t&annee=a... zPour le script PHP, cela donne: $titre = t; $annee=a; Et on peut maintenant utiliser ces données pour fabriquer une page HTML

41 Passage de valeurs multiples (démo)démo <FORM ACTION="http://cartier/ITCE/EXEMPLES/ExPHP2.php" METHOD=POST"> Titre : Prénom Nom Votre choix

42 Que se passe-t-il quand on valide ? Le programme client transmet au programme serveur les infos sous la forme: titre=t&prenom[]=p1&nom[]=n1&prenom[]=p2&nom[]=n2&... zPour le script PHP, cela donne: $titre = t; $prenom[] = p1, $nom[] = n1; $prenom[] = p2, $nom[] = n2;... z=> on crée deux tableaux PHP !

43 Ce que fait le script <?php echo "Pour le film $titre j'ai reu les acteurs suivants : \n"; $nbActeurs = count($prenom); for ($i=0; $i < $nbActeurs; $i++) echo " $prenom[$i] $nom[$i] \n"; ?>  Une boucle sur les tableaux permet de récupérer les valeurs.  -> A utiliser aussi pour les champs SELECT multiples.

44 Transmission de fichiers <FORM ACTION="http://cartier/ITCE/EXEMPLES/ExPHP3.php" METHOD=POST" ENCTYPE= "multipart/form-data"> Titre : Affiche : Votre choix

45 Transmission de fichiers zLe fichier est transmis sur le serveur avec quelques variables qui le décrivent: <?php echo "Pour le film $titre j'ai recu le fichier suivant : \n"; echo " Nom du fichier client : $affiche_name \n"; echo " Nom du fichier sur le serveur : $affiche \n"; echo " Taille du fichier : $affiche_size \n"; echo " Type du fichier : $affiche_type \n"; // Copie du fichier temporaire copy($affiche, "./MonAffiche"); ?>

46 Autres variables utiles zInfos. sur le client : y$REMOTE_HOST : nom de la machine client y$REMOTE_ADDR : adresse IP de la machine client y$REMOTE_USER : nom du client après identification y$HTTP_ACCEPT : liste des types MIME acceptés par le client y$HTTP_USER_AGENT : nom du navigateur

47 Application : production de code HTML

48 Intégration avec HTML zQuestion : vaut-il mieux mettre du PHP dans du HTML ou l'inverse ? yPour HTML : on génère le site avec un bon éditeur, et on met un peu de PHP dedans xMais... le code est ILLISIBLE yPour PHP : on programme des utilitaires pour produire du HTML xLe code est lisible... pour les informaticiens.

49 Fonctions produisant du code // Fonctions produisant des conteneurs HTML function Ancre ($url, $libelle, $classe="") { return " $libelle \n"; } function Image ($fichier, $largeur=-1, $hauteur=-1, $bordure=0) { if ($largeur != -1) $attrLargeur = " WIDTH = '$largeur %' "; if ($hauteur != -1) $attrHauteur = " HEIGHT = '$hauteur %' "; return "<IMG SRC='$fichier'". $attrLargeur. $attrHauteur. " BORDER='$bordure'>\n"; }

50 Exemple zFaire un lien sur une image : <?php echo Ancre(http://www.truc.org/maison.html, Image( maison.gif )); ?> zProduit :

51 Création de module zUn module = un ensemble de fonctions prenant en charge une partie de l'application zExemple: module de production de tableaux: yTblDebut -> produit la balise yTblFin -> produit la balise yTblLigne, TblCellule -> pour écrire la table

52 Module Table : fonction TblDebut function TblDebut ($pBordure = '1', // La bordure $pLargeur = '', $pEspCell = '2', // CELLSPACING $pRemplCell = '4', // CELLPADDING $classe = "") { echo "<TABLE BORDER='$pBordure' ". "CELLSPACING='$pEspCell' ". "CELLPADDING='$pRemplCell' WIDTH='$pLargeur' ". "CLASS ='$classe'>\n"; } // Fin de la fonction

53 Lignes et cellules function TblDebutLigne ($classe="") { echo " \n"; } function TblCellule ($contenu, $nbLig=1, $nbCol=1, $classe="") { echo "<TD ROWSPAN='$nbLig' ". "COLSPAN='$nbCol' CLASS='$classe'>". "$contenu \n"; }

54 Fonction affichant un en- tête : module Design.php require ("Table.php"); require ("HTML.php"); function Entete ($titre, $texte, $menu, $style) { echo " $titre \n"; echo " \n"; TblDebut (0, 100); TblDebutLigne (); TblCellule (Image ('/icons/cnam60.gif')); TblCellule (" $texte ", 1, 1, "TITRE"); TblFinLigne(); TblFin (); TblDebut (0, 100); TblDebutLigne (); while ( list ($libelle, $ancre) = each ($menu)) TblCellule (Ancre ($ancre, $libelle, "MENU")); TblFin(); TblFin(); }

55 Au début de chaque page... <?php require("Design.php"); $titre = "Commerce Electronique"; $menu = array ("Accueil" => "index.php", "Documentation" => "Documentation.php", "Cours" => "Cours.php", "Travaux dirigés" => "TD.php", "Forum" => "Forum.php", "Liens" => "Liens.php"); $style = "/CSS/uv.css"; Entete ($titre, "Commerce électronique", $menu, $style); ?> Bienvenue sur le site de l'U.V. "Commerce électronique" !

56 zEt la programmation objet ? yNotion de classes en Php yRassembler en un objet formulaire toutes les informations necessaires zDe nombreux exemples sur le site http://cartier.cnam.fr:8080

57 Les cookies zLe serveur demande au navigateur de stocker une variable ayant un nom et une valeur, pour une durée déterminée. yMonServeur dit à MonNavi : « stocke la variable 'MaVariable' avec la valeur '100' pendant 2 jours » zLe navigateur transmet ensuite systématiquement la variable au serveur qui l'a créée yMonNavi transmet à MonServeur la variable sous la forme MaVariable=100

58 Cookies et sessions web zLes cookies sont essentiels pour établir une continuité dans le dialogue client/serveur yQuand un client se connecte la première fois: le serveur lui associe un identifiant de session yLe serveur transmet cet identifiant au client sous la forme d'un cookie yOn conserve un historique des actions du client, associé à l'identifiant de session yQuand le client se connecte à nouveau: on sait l'identifier grace au cookie.

59 Gestion de session avec cookie Client Serveur Première connexion Création d'une session Infos. session id=100 Création du cookie Envoi du cookie id=100 On sait de qui il s'agit Envoi du cookie Client Validité

60 Fonctions Php pour sessions zsession_start() : yidentifie ou crée la session ysi existe déjà, recrée toutes les variables Php associées ydoit être appelé au début du script Php zsession_destroy() ydétruit les information associée à la session

61 Fonctions Php pour sessions zsession_id() yrenvoie l identifiant de la session zsession_register(nomVar) yassocie une variable Php à la session y-> cette variable sera retrouvée à chaque session

62 Fonctions Php pour sessions zsession_unregister(nomVar) : ysupprime une variable de la session zsession_is_registered(nomVar) ytest l existence d une variable

63 Exemple (1/2) : doc.php <?php Session_start(); $derniereVisite=date(h:i:s); session_register(toto); ?> Une visite de cette page ->mémorisation de $toto dans le navigateur

64 Exemple (2/2) : truc.php <?php session_start(); if (session_is_registered(toto)) echo ha ha ! Vous avez visite la page doc.php le $toto ; else echo premiere visite ; ?>

65 Conclusion zPHP : ylangage puissant, très bien intégré à HTML yde très nombreuses fonctions ygratuit zPermet : yla gestion des formulaires yla gestion des utilisateurs du site (session) yet prochainement…bases de données !


Télécharger ppt "Formulaires, CGI et PHP David Gross-Amblard (CNAM-Vertigo/Cédric) Transparents originaux : Philippe Rigaux Projet 3I 31.10.2001."

Présentations similaires


Annonces Google