Formulaires, CGI et PHP David Gross-Amblard (CNAM-Vertigo/Cédric) [email protected] Transparents...
-
Upload
sybille-tellier -
Category
Documents
-
view
102 -
download
0
Transcript of Formulaires, CGI et PHP David Gross-Amblard (CNAM-Vertigo/Cédric) [email protected] Transparents...
![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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/1.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/2.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/3.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/4.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/5.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/6.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/7.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/8.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/9.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/10.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/11.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/12.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/13.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/14.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/15.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/16.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/17.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/18.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/19.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/20.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/21.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/22.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/23.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/24.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/25.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/26.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/27.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/28.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/29.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/30.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/31.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/32.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/33.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/34.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/35.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/36.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/37.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/38.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/39.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/40.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/41.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/42.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/43.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/44.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/45.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/46.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/47.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/48.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/49.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/50.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/51.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/52.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/53.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/54.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/55.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/56.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/57.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/58.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/59.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/60.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/61.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/62.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/63.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/64.jpg)
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.](https://reader036.fdocuments.in/reader036/viewer/2022081602/551d9dba497959293b8dde2c/html5/thumbnails/65.jpg)
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 !