php-31.10.2001.ppt

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

Upload: hamza

Post on 16-Sep-2015

2 views

Category:

Documents


0 download

TRANSCRIPT

  • Formulaires, CGI et PHPDavid Gross-Amblard(CNAM-Vertigo/Cdric)[email protected]

    Transparents originaux : Philippe Rigaux

    Projet 3I 31.10.2001

  • PlanLe langage PHPprincipesyntaxeApplications de PHPformulaires HTML, interaction avec PhpProduction automatique de documents HTML(Gestion de sessions : les cookies en Php)

  • Informationswww.php.net : la rfrencewww.easyphp.org : un paquetage complet sous windowsDe trs nombreux scripts sur le web : forums, agenda, jeux, prt--servir.

  • Le langage PHP

  • PHP, qu'est-ce que c'est ?Un langage pour la programmation du serveurPermet d'inclure des parties programmes dans du HTMLTrs proche du langage CTrs riche en fonctions, notamment pour l'accs aux bases de donnes

  • Petit exemple PHP : toto.php

    Bonjour

    Quelle heure est-il ?

    Il est exactement

  • Comment a marche NavigateurProgramme serveurInterprteurPHPExcution des instructionsPHPmachine serveurRequte HTTP : toto.phpDocumentHTMLFichier toto.phpHTML/PHP

  • Ce que renvoit le serveur

    Bonjour

    Quelle heure est-il ?

    Il est exactement 19:38:5

    Le navigateur ne voit que du HTML !

  • Syntaxe de PHPCommentaires/* ... */ ou //... ou # ...VariablesUn '$', puis (au moins) une lettre, puis tout ce qu'on veut.Attention : distinction minuscules/majusculesConstantesdefine (PI, 3.14116)

  • Dclaration de variables, typesPas de dclaration de variable en PHP !L'apparition d'un nouveau symbole prfix par '$' entrane la cration d'une variable Ex : $maVariable = 1;La valeur initiale est '''' ou 0 selon le contexteLe typage est dynamiqueUne mme variable peut tre utilise pour stocker plusieurs types de donnesDes conversions sont appliques quand c'est ncessaire.

  • Types scalairesLes entiers $i = 1;Les flottants $i = 1.12;Les chanes de caractre $i = "Je suis une chane";Boolen $i = true;NB: 0 false, tout le reste vaut true.

  • A propos des chanes de caractresApostrophes simples : mise en page quelconque. $c = 'Je suis une chane de caractres';Apostrophes doubles : possibilit d'inclure des variables $nom = "Phileas Fogg"; $c = "Je m'appelle $nom";

  • Production de HTMLOn crit avec echo ou printfDes chanes et/ou des variablesEn utilisant la concatnation, '.'$nom = "Fogg"; $nb = 3; echo "Je m'appelle $nom" . "et je prends le mtro " . $nb . " fois par jour";

  • TableauxTableaux indics : liste de valeurs indices par 0, 1, 2, ... $tab[0] = 1; $tab[1] = "une chane";Tableaux associatifs : liste de valeurs rfrences par des cls $MES["Vertigo"]="Hitchcock"; $MES ["Gladiator"]="Scott";

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

  • Parcours d'un tableauTableau indic : en incrmentant l'indicefor ($i=0; $i < count($tab); $i++) echo "Element $i =" . $tab[$i];Tableau associatif : avec des fonctionsUn curseur sur le tableau est dplac avec next ou prevLes fonctions key et current renvoient les donnes du curseur. do{ echo "Cl : .key($mes). lment :.current($mes); } while (next($mes));

  • ExpressionsExpression = tout ce qui a une valeur.En PHP, comme en C, presques toutes les instructions ont une valeur.10;$i = 10;$i;L'affectation a elle-mme une valeur, donc on peut crire$j = $i = 10;

  • OprateursOprateurs arithmtiques: +, -, *, /$i = 20; $i = ($i + 2) * 34;Comparaisons : ==, , =$i == 20; $j == $j - 1;Oprateurs logiques: && (and) || (or) ! (not)($i == 20 && $j = j-1)Concatnation de chanes$c1 = "Phileas"; $c2 = "Fogg";$nom = $c1 . " " . $c2;

  • Facilits syntaxiquesExpressions quivalentes :$i = $i + 20; $i += $20;Valable pour tous les oprateurs$nom = "Phileas "; $nom .= "Fogg";IncrmentationsAu lieu de $i=$i+1, on crit $i++ ou ++$i;Valeur de l'expression ?

  • Structures de contrle : testsif (expression) { // bloc si expression != 0 } else { // bloc si expression = 0 }Rappel: expression = tout ce qui produit une valeur ! Les if-then-else peuvent s'imbriquer.

  • Structures de contrle : switchswitch (expression) { case val1: // bloc si expression==val1 break; case val2: // bloc si expression==val1 break; ... default: // tout a chou break; }

  • Boucles : do et whilewhile (expression) { // bloc tant que expression!=0 }A un moment donn, expression doit devenir 0 !do { // bloc tant que expression!=0 } while (expression)NB : le bloc s'excute au moins une fois

  • Boucles : for$i = 0; while ($i < 5) { // bloc $i++; }Peut tre remplac par :for ($i=0; $i
  • Instructions break et continueL'instruction break permet de sortir du corps d'une boucle.L'instruction continue force le passage l'itration suivante.$i = 0; while (1) { if (++$i == 5) break; if ($i == 3) continue; // instructions }

  • Fonctions: passage des argumentsfunction 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 !

  • Fonctions: passage par adresseEn prfixant par '&', on passe une variable par adresse.Introduit un effet de bord si la fonction modifie ses arguments : trs mauvais $i = 1; $j = 1;

    // Appel de la fonction, passage par valeur $k = Addition (&$i, &$j);

    // $i et $j valent 2 et 3 !

  • Passage par adresse avec dclarationfunction 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

  • Valeurs par dfautIl est possible de donner une valeur par dfaut aux arguments: trs pratiquefunction Connexion ($nom=gross", $passe="mdp", $serveur="cortes") { // instructions } ... // Connexion cortes Connexion (); // Connexion de Amman cortes Connexion ("amann","mdp2"); // Connexion cartier Connexion ("gross","mdp","cartier")

  • Fonctions et variables : conseil du jourBon principe : une fonction n'accde pas aux variables du programme appelant, et rciproquementVariables automatiques : apparaissent et disparaissent avec la fonction => trs bonVariables statiques : locales la fonction, mais persistantes entre deux appels => bonVariables globales : visibles partout => TRES MAUVAIS.=> Se limiter aux variables automatiques

  • Application : formulaires HTML

  • Formulaires HTML: Un conteneur pour les champs de saisie:ACTION est l'URL du script ou du programme dclencher (en principae, sur le serveur)METHOD est GET ou POST (meilleur)

  • Exemple : un formulaire HTML (dmo)

    Paramtres pour la recherche de films :

    Titre :

    Anne dbut :

    Anne fin :

  • TransmissionChaque champ a un nomGET : les donnes sont transmises dans lURLhttp://cortes.cnam.fr:8080/action.php?titre=alien&anMin=1950&anMax=2001POST : transmission dans le protocole HTTP (invisible sur lURL)

  • Champs de formulaire : Trs gnral: saisie de texte, ou choix dans des listes. L'attribut TYPE vaut:TEXT pour les chanes de caractresHIDDEN pour les champs cachsCHECKBOX pour un choix multipleRADIOBOX pour un choix exclusifSUBMIT pour dclencher l'actionFILE pour transmettre un fichier

  • Champs Permet de choisir une ou plusieurs valeurs dans une liste Alfred Hitchcock Maurice Pialat Quentin Tarantino L'option MULTIPLE permet de slectionner plusieurs valeurs

  • Champ Pour entrer du texte libre: Rsum du film L'attribut MAXLENGTH indique la longueur maximale du text.

  • Un formulaire complet (dmo)

    Titre : Anne : Comdie : Drame : Histoire : Suspense :

    France : Etats-Unis : Allemagne : Japon :

    Affiche du film :

  • Un formulaire complet (suite)Metteur-en-scne : Alfred Hitchcock Maurice Pialat Quentin Tarantino Akira Kurosawa John Woo Tim Burton

    Rsum:Rsum

    Votre choix

  • Traitement des donnes en PHPOn rcupre, sous forme de variable PHP, les champs d'un formulairePour les valeurs scalaires -> un variablePour les fichiers -> un nom de fichier temporaire

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

  • Passage de valeurs multiples (dmo)
  • 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&...Pour le script PHP, cela donne:$titre = t; $prenom[] = p1, $nom[] = n1; $prenom[] = p2, $nom[] = n2; ...=> on cre deux tableaux PHP !

  • Ce que fait le script
  • Transmission de fichiers
  • Transmission de fichiersLe fichier est transmis sur le serveur avec quelques variables qui le dcrivent:
  • Autres variables utilesInfos. sur le client :$REMOTE_HOST : nom de la machine client$REMOTE_ADDR : adresse IP de la machine client$REMOTE_USER : nom du client aprs identification$HTTP_ACCEPT : liste des types MIME accepts par le client$HTTP_USER_AGENT : nom du navigateur

  • Application : production de code HTML

  • Intgration avec HTMLQuestion : vaut-il mieux mettre du PHP dans du HTML ou l'inverse ?Pour HTML : on gnre le site avec un bon diteur, et on met un peu de PHP dedansMais ... le code est ILLISIBLEPour PHP : on programme des utilitaires pour produire du HTMLLe code est lisible ... pour les informaticiens.

  • 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 "\n"; }

  • ExempleFaire un lien sur une image :

    Produit :

  • Cration de moduleUn module = un ensemble de fonctions prenant en charge une partie de l'applicationExemple: module de production de tableaux:TblDebut -> produit la balise TblFin -> produit la balise TblLigne, TblCellule -> pour crire la table

  • Module Table : fonction TblDebut function TblDebut ($pBordure = '1', // La bordure $pLargeur = '', $pEspCell = '2', // CELLSPACING $pRemplCell = '4', // CELLPADDING $classe = "") { echo "\n"; } // Fin de la fonction

  • Lignes et cellules function TblDebutLigne ($classe="") { echo "\n"; }

    function TblCellule ($contenu, $nbLig=1, $nbCol=1, $classe="") { echo "" . "$contenu\n"; }

  • Fonction affichant un en-tte : module Design.php require ("Table.php"); require ("HTML.php"); function Entete ($titre, $texte, $menu, $style) { echo "$titre\n"; echo "\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(); }

  • Au dbut de chaque page ...

    Bienvenue sur le site de l'U.V. "Commerce lectronique" !

  • Et la programmation objet ?Notion de classes en PhpRassembler en un objet formulaire toutes les informations necessairesDe nombreux exemples sur le site http://cartier.cnam.fr:8080

  • Les cookiesLe serveur demande au navigateur de stocker une variable ayant un nom et une valeur, pour une dure dtermine.MonServeur dit MonNavi : stocke la variable 'MaVariable' avec la valeur '100' pendant 2 jours Le navigateur transmet ensuite systmatiquement la variable au serveur qui l'a creMonNavi transmet MonServeur la variable sous la forme MaVariable=100

  • Cookies et sessions webLes cookies sont essentiels pour tablir une continuit dans le dialogue client/serveurQuand un client se connecte la premire fois: le serveur lui associe un identifiant de sessionLe serveur transmet cet identifiant au client sous la forme d'un cookieOn conserve un historique des actions du client, associ l'identifiant de sessionQuand le client se connecte nouveau: on sait l'identifier grace au cookie.

  • Gestion de session avec cookieClientServeurPremireconnexionCration d'une sessionInfos.sessionid=100Cration du cookieEnvoi du cookieid=100On sait dequi il s'agitEnvoi du cookieClientClientValidit

  • Fonctions Php pour sessionssession_start() : identifie ou cre la sessionsi existe dj, recre toutes les variables Php associesdoit tre appel au dbut du script Php

    session_destroy()dtruit les information associe la session

  • Fonctions Php pour sessionssession_id()renvoie lidentifiant de la sessionsession_register(nomVar)associe une variable Php la session-> cette variable sera retrouve chaque session

  • Fonctions Php pour sessions session_unregister(nomVar) :supprime une variable de la session

    session_is_registered(nomVar)test lexistence dune variable

  • Exemple (1/2) : doc.php

    Une visite de cette page ->mmorisation de $toto dans le navigateur

  • Exemple (2/2) : truc.php

  • ConclusionPHP : langage puissant, trs bien intgr HTMLde trs nombreuses fonctionsgratuitPermet :la gestion des formulairesla gestion des utilisateurs du site (session)et prochainementbases de donnes !