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

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

Embed Size (px)

Citation preview

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

Formulaires, CGI et PHP

David Gross-Amblard(CNAM-Vertigo/Cédric)[email protected]

Transparents originaux : Philippe Rigaux

Projet 3I 31.10.2001

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

Plan

Le langage PHP principe syntaxe

Applications de PHP formulaires HTML, interaction avec Php Production automatique de documents

HTML (Gestion de sessions : les cookies en Php)

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

Informations

www.php.net : la référencewww.easyphp.org : un paquetage

complet sous windowsDe très nombreux scripts sur le

web : forums, agenda, jeux, … prêt-à-servir.

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

Le langage PHP

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

PHP, qu'est-ce que c'est ?

Un langage pour la programmation du serveur

Permet d'inclure des parties programmées dans du HTML

Très proche du langage CTrès riche en fonctions, notamment

pour l'accès aux bases de données

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

Petit exemple PHP : toto.php

<HTML><HEAD><TITLE>Bonjour</TITLE></HEAD><BODY>

<H1>Quelle heure est-il ?</H1>

<P>Il est exactement <?php echo date(“h:i:s”); ?></P>

</BODY></HTML>

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

Comment ça marche

NavigateurProgramme serveur

InterprêteurPHP

Exécution des instructionsPHP

machine serveur

Requête HTTP : toto.php

DocumentHTML Fichier

toto.phpHTML/PHP

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

Ce que renvoit le serveur

<HTML>

<HEAD><TITLE>Bonjour</TITLE></HEAD>

<BODY>

<H1>Quelle heure est-il ?</H1>

<P>Il est exactement 19:38:5

</P>

</BODY>

</HTML>

Le navigateur ne voit que du HTML !

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

Syntaxe de PHP

Commentaires /* ... */ ou //... ou # ...

Variables Un '$', puis (au moins) une lettre, puis tout

ce qu'on veut. Attention : distinction

minuscules/majusculesConstantes

define (PI, 3.14116)

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

Déclaration de variables, types

Pas de déclaration de variable en PHP ! L'apparition d'un nouveau symbole préfixé

par '$' entraîne la création d'une variableEx : $maVariable = 1;

La valeur initiale est '''' ou 0 selon le contexteLe typage est dynamique

Une même variable peut être utilisée pour stocker plusieurs types de données

Des conversions sont appliquées quand c'est nécessaire.

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

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;

NB: 0 <=> false, tout le reste vaut true.

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

A propos des chaînes de caractères

Apostrophes simples : mise en page quelconque.

$c = 'Je suis une chaînede caractères';

Apostrophes doubles : possibilité d'inclure des variables

$nom = "Phileas Fogg";$c = "Je m'appelle $nom";

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

Production de HTML

On écrit avec echo ou printfDes chaînes et/ou des variablesEn utilisant la concaténation, '.'$nom = "Fogg";$nb = 3;echo "Je m'appelle $nom" . "et je prends le métro " . $nb . " fois par jour";

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

Tableaux

Tableaux indicés : liste de valeurs indicées par 0, 1, 2, ...

$tab[0] = 1; $tab[1] = "une chaîne";

Tableaux associatifs : liste de valeurs référencées par des clés$MES["Vertigo"]="Hitchcock";$MES ["Gladiator"]="Scott";

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

Initialisation d'un tableau

Avec 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;

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

Parcours d'un tableau

Tableau indicé : en incrémentant l'indice for ($i=0; $i < count($tab); $i++)

echo "Element $i =" . $tab[$i];

Tableau associatif : avec des fonctions Un curseur sur le tableau est déplacé avec next

ou prev Les fonctions key et current renvoient les

données du curseur. do{ echo "Clé : “.key($mes).” élément :”.current($mes); } while (next($mes));

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

Expressions

Expression = 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-même une valeur, donc on peut écrire$j = $i = 10;

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

Opérateurs

Opérateurs arithmétiques: +, -, *, / $i = 20; $i = ($i + 2) * 34;

Comparaisons : ==, <, >, <=, >= $i == 20; $j == $j - 1;

Opérateurs logiques: && (and) || (or) ! (not) ($i == 20 && $j = j-1)

Concaténation de chaînes $c1 = "Phileas"; $c2 = "Fogg"; $nom = $c1 . " " . $c2;

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

Facilités syntaxiques

Expressions équivalentes : $i = $i + 20; $i += $20; Valable pour tous les opérateurs $nom = "Phileas "; $nom .= "Fogg";

Incrémentations Au lieu de $i=$i+1, on écrit $i++ ou ++$i; Valeur de l'expression ?

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

Structures de contrôle : tests

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

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

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; }

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

Boucles : do et while

while (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'exécute au moins une fois

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

Boucles : for

$i = 0;while ($i < 5){ // bloc $i++;}

Peut être remplacé par :for ($i=0; $i<5; $i++) {bloc};NB : on peut faire des choses très

compliquées.

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

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}

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

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 !

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

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 !

En préfixant par '&', on passe une variable par adresse.

Introduit un effet de bord si la fonction modifie ses arguments : très mauvais

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

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

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

Valeurs par défaut

Il 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 à cartierConnexion ("gross","mdp","cartier")

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

Fonctions et variables : conseil du jour

Bon principe : une fonction n'accède pas aux variables du programme appelant, et réciproquement Variables automatiques : apparaissent et

disparaissent avec la fonction => très bon Variables statiques : locales à la fonction,

mais persistantes entre deux appels => bon Variables globales : visibles partout =>

TRES MAUVAIS.=> Se limiter aux variables

automatiques

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

Application : formulaires HTML

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

Formulaires HTML: <FORM>

Un conteneur pour les champs de saisie: ACTION est l'URL du script ou du

programme à déclencher (en principae, sur le serveur)

METHOD est GET ou POST (meilleur)

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

Exemple : un formulaire HTML (démo)

<FORM ACTION='http://cortes.cnam.fr:8080/action.php' METHOD=GET>

Paramètres pour la recherche de films :<P>

Titre : <INPUT TYPE=TEXT SIZE=20 NAME = 'titre'> <P>

Année début : <INPUT TYPE=TEXT SIZE=4 NAME='anMin' VALUE=1900>

Année fin : <INPUT TYPE=TEXT SIZE=4 NAME='anMax' VALUE=2100> <P>

<INPUT TYPE=SUBMIT VALUE='Rechercher'>

</FORM></BODY></HTML>

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

Transmission

Chaque champ a un nomGET : les données sont transmises

dans l ’URLhttp://cortes.cnam.fr:8080/

action.php?titre=alien&

anMin=1950&anMax=2001

POST : transmission dans le protocole HTTP (invisible sur l ’URL)

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

Champs de formulaire : <INPUT>

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

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

Champs <SELECT>

Permet de choisir une ou plusieurs valeurs dans une liste

<SELECT NAME='realisateur' SIZE=3> <OPTION VALUE=1>Alfred Hitchcock <OPTION VALUE=2 SELECTED>Maurice Pialat <OPTION VALUE=3>Quentin Tarantino</SELECT>

L'option MULTIPLE permet de sélectionner plusieurs valeurs

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

Champ <TEXTAREA>

Pour entrer du texte libre: <TEXTAREA NAME='resume' COLS=30 ROWS=3> Résumé du film </TEXTAREA>

L'attribut MAXLENGTH indique la longueur maximale du text.

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

Un formulaire complet (démo)

<FORM ACTION="http://cortes.cnam.fr:8080/ExPHP1.php" METHOD=POST >

<INPUT TYPE="HIDDEN" NAME="monNom" VALUE="ExFormFilm">

Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre">Année : <INPUT TYPE=TEXT SIZE=4 MAXLENGTH=4 NAME="annee"><P> Comédie : <INPUT TYPE=CHECKBOX NAME='genre' VALUE='C'>Drame : <INPUT TYPE=CHECKBOX NAME='genre' VALUE='D'>Histoire : <INPUT TYPE=CHECKBOX NAME='genre' VALUE='H'>Suspense : <INPUT TYPE=CHECKBOX NAME='genre' VALUE='S'><P>France : <INPUT TYPE=RADIO NAME='pays' VALUE='FR' CHECKED>Etats-Unis : <INPUT TYPE=RADIO NAME='pays' VALUE='US'>Allemagne : <INPUT TYPE=RADIO NAME='pays' VALUE='DE'>Japon : <INPUT TYPE=RADIO NAME='pays' VALUE='JP'><P>Affiche du film : <INPUT TYPE=FILE SIZE=20 NAME='affiche'>

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

Un formulaire complet (suite)

Metteur-en-scène : <SELECT NAME='realisateur' SIZE=3> <OPTION VALUE=1>Alfred Hitchcock <OPTION VALUE=2>Maurice Pialat <OPTION VALUE=3 SELECTED>Quentin Tarantino <OPTION VALUE=4>Akira Kurosawa <OPTION VALUE=5>John Woo <OPTION VALUE=6>Tim Burton </SELECT><P>Résumé:<TEXTAREA NAME='resume' COLS=30 ROWS=3>Résumé </TEXTAREA>

<H1>Votre choix</H1><INPUT TYPE=SUBMIT VALUE='Valider'><INPUT TYPE=RESET VALUE='Annuler'></FORM>

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

Traitement des données en PHP

On récupère, sous forme de variable PHP, les champs d'un formulaire Pour les valeurs scalaires -> un variable Pour les fichiers -> un nom de fichier

temporaire

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

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 données pour fabriquer une page HTML<?php if ($année<1920) echo “Desole, on a pas.”; ?>

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

Passage de valeurs multiples (démo)

<FORM ACTION="http://cartier/ITCE/EXEMPLES/ExPHP2.php" METHOD=POST">Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre"> <TABLE><TR><TH>Prénom</TH><TH>Nom</TH></TR> <TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]">

<TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]">

<TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]"> </TABLE>

<H1>Votre choix</H1> <INPUT TYPE=SUBMIT VALUE='Valider'> <INPUT TYPE=RESET VALUE='Annuler'></FORM>

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

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 crée deux tableaux PHP !

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

Ce que fait le script

<?php echo "Pour le film $titre j'ai re₤u les acteurs suivants :<P>\n"; $nbActeurs = count($prenom); for ($i=0; $i < $nbActeurs; $i++) echo "<B> $prenom[$i] $nom[$i]<B><BR>\n";?>

� Une boucle sur les tableaux permet de récupérer les valeurs.

� -> A utiliser aussi pour les champs SELECT multiples.

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

Transmission de fichiers

<FORM ACTION="http://cartier/ITCE/EXEMPLES/ExPHP3.php" METHOD=POST" ENCTYPE= "multipart/form-data">

<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre">

<P> Affiche : <INPUT TYPE=FILE SIZE=20 NAME='affiche'> <H1>Votre choix</H1> <INPUT TYPE=SUBMIT VALUE='Valider'> <INPUT TYPE=RESET VALUE='Annuler'>

</FORM>

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

Transmission de fichiers

Le 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 :<P>\n"; echo "<B>Nom du fichier client :<B>$affiche_name<BR>\n"; echo "<B>Nom du fichier sur le serveur :<B>$affiche<BR>\n"; echo "<B>Taille du fichier :<B>$affiche_size<BR>\n"; echo "<B>Type du fichier :<B>$affiche_type<BR>\n";

// Copie du fichier temporaire copy($affiche, "./MonAffiche"); ?>

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

Autres variables utiles

Infos. sur le client : $REMOTE_HOST : nom de la machine client $REMOTE_ADDR : adresse IP de la machine

client $REMOTE_USER : nom du client après

identification $HTTP_ACCEPT : liste des types MIME

acceptés par le client $HTTP_USER_AGENT : nom du navigateur

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

Application : production de code HTML

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

Intégration avec HTML

Question : vaut-il mieux mettre du PHP dans du HTML ou l'inverse ? Pour HTML : on génère le site avec un

bon éditeur, et on met un peu de PHP dedansMais ... le code est ILLISIBLE

Pour PHP : on programme des utilitaires pour produire du HTMLLe code est lisible ... pour les informaticiens.

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

Fonctions produisant du code

// Fonctions produisant des conteneurs HTML function Ancre ($url, $libelle, $classe="") { return "<A HREF='$url' CLASS='$classe'>$libelle</A>\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"; }

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

Exemple

Faire un lien sur une image :<?php

echo Ancre(‘http://www.truc.org/maison.html’, Image(‘ maison.gif ’));

?>

Produit :<A HREF=’http://www.truc.org/maison.html’ CLASS=‘’>

<IMG SRC=‘ maison.gif ’ BORDER=0>

</A>

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

Création de module

Un module = un ensemble de fonctions prenant en charge une partie de l'application

Exemple: module de production de tableaux: TblDebut -> produit la balise <TABLE> TblFin -> produit la balise </TABLE> TblLigne, TblCellule -> pour écrire la table

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

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

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

Lignes et cellules

function TblDebutLigne ($classe="") { echo "<TR CLASS='$classe'>\n"; }

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

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

Fonction affichant un en-tête : module Design.php

require ("Table.php"); require ("HTML.php"); function Entete ($titre, $texte, $menu, $style) { echo "<HTML><HEAD><TITLE>$titre</TITLE>\n"; echo "<LINK REL=\"stylesheet\" HREF=\"$style\" TYPE=\"text/css\">\n"; echo "</HEAD><BODY>\n";

TblDebut (0, 100); TblDebutLigne (); TblCellule (Image ('/icons/cnam60.gif')); TblCellule ("<CENTER><FONT>$texte</FONT></CENTER>", 1, 1, "TITRE"); TblFinLigne(); TblFin ();

TblDebut (0, 100); TblDebutLigne (); while ( list ($libelle, $ancre) = each ($menu)) TblCellule (Ancre ($ancre, $libelle, "MENU")); TblFin(); TblFin(); }

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

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" !

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

Et la programmation objet ? Notion de classes en Php Rassembler en un objet “formulaire”

toutes les informations necessairesDe nombreux exemples sur le site

http://cartier.cnam.fr:8080

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

Les cookies

Le serveur demande au navigateur de stocker une variable ayant un nom et une valeur, pour une durée déterminée. MonServeur dit à MonNavi : « stocke la

variable 'MaVariable' avec la valeur '100' pendant 2 jours »

Le navigateur transmet ensuite systématiquement la variable au serveur qui l'a créée MonNavi transmet à MonServeur la

variable sous la forme MaVariable=100

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

Cookies et sessions web

Les cookies sont essentiels pour établir une continuité dans le dialogue client/serveur Quand un client se connecte la première fois: le

serveur lui associe un identifiant de session Le serveur transmet cet identifiant au client

sous la forme d'un cookie On conserve un historique des actions du client,

associé à l'identifiant de session Quand le client se connecte à nouveau: on sait

l'identifier grace au cookie.

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

Gestion de session avec cookie

Client

Serveur

Premièreconnexion

Création d'une session

Infos.session

id=100Création du cookie

Envoi du cookie

id=100

On sait dequi il s'agit

Envoi du cookie

Client

Client

Validité

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

Fonctions Php pour sessions

session_start() : identifie ou crée la session si existe déjà, recrée toutes les variables

Php associées doit être appelé au début du script Php

session_destroy() détruit les information associée à la

session

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

Fonctions Php pour sessions

session_id() renvoie l ’identifiant de la session

session_register(nomVar) associe une variable Php à la session -> cette variable sera retrouvée à

chaque session

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

Fonctions Php pour sessions

session_unregister(nomVar) : supprime une variable de la session

session_is_registered(nomVar) test l ’existence d ’une variable

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

Exemple (1/2) : doc.php

<?phpSession_start();

$derniereVisite=date(‘h:i:s’);

session_register(toto);

?>

Une visite de cette page ->mémorisation de $toto dans le navigateur

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

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 ’;

?>

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

Conclusion

PHP : langage puissant, très bien intégré à HTML de très nombreuses fonctions gratuit

Permet : la gestion des formulaires la gestion des utilisateurs du site (session) et prochainement…bases de données !