Vous êtes sur la page 1sur 65

Formulaires, CGI et PHP

David Gross-Amblard
(CNAM-Vertigo/Cdric)
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)

Informations
www.php.net : la rfrence
www.easyphp.org : un paquetage
complet sous windows
De 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
serveur
Permet d'inclure des parties
programmes dans du HTML
Trs proche du langage C
Trs riche en fonctions, notamment
pour l'accs aux bases de donnes

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>

Comment a marche
Requte HTTP : toto.php
Programme
serveur

Navigateur
Document
HTML

Fichier
toto.php
HTML/PHP

machine serveur

Interprteur
PHP

Excution
des instructions
PHP

Ce que renvoit le serveur


<HTML>
<HEAD><TITLE>Bonjour</TITLE></HEAD>
<BODY>
<H1>Quelleheureestil?</H1>
<P>Ilestexactement19:38:5
</P>
</BODY>
</HTML>

Le navigateur ne voit que du HTML !

Syntaxe de PHP
Commentaires
/* ... */ ou //... ou # ...

Variables
Un '$', puis (au moins) une lettre, puis tout
ce qu'on veut.
Attention : distinction minuscules/majuscules

Constantes
define (PI, 3.14116)

Dclaration de variables,
types
Pas 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 contexte

Le typage est dynamique


Une mme variable peut tre utilise pour
stocker plusieurs types de donnes
Des conversions sont appliques quand c'est
ncessaire.

Types scalaires
Les entiers
$i=1;
Les flottants
$i=1.12;
Les chanes de caractre
$i="Jesuisunechane";
Boolen
$i=true;
NB: 0 <=> false, tout le reste vaut true.

A propos des chanes de


caractres
Apostrophes simples : mise en page
quelconque.
$c='Jesuisunechane
decaractres';
Apostrophes doubles : possibilit
d'inclure des variables
$nom="PhileasFogg";
$c="Jem'appelle$nom";

Production de HTML

On crit avec echo ou printf


Des chanes et/ou des variables
En utilisant la concatnation, '.'
$nom="Fogg";
$nb=3;
echo"Jem'appelle$nom"
."etjeprendslemtro"
.$nb."foisparjour";

Tableaux
Tableaux indics :
liste de valeurs indices par 0, 1, 2, ...
$tab[0]=1;
$tab[1]="unechane";

Tableaux associatifs :
liste de valeurs rfrences par des cls
$MES["Vertigo"]="Hitchcock";
$MES["Gladiator"]="Scott";

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;

Parcours d'un tableau


Tableau indic : en incrmentant 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 dplac avec next ou
prev
Les fonctions key et current renvoient les donnes
du curseur.
do{
echo"Cl:.key($mes).
lment:.current($mes);
}while(next($mes));

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-mme une valeur,


donc on peut crire
$j=$i=10;

Oprateurs
Oprateurs arithmtiques: +, -, *, /
$i=20;$i=($i+2)*34;

Comparaisons : ==, <, >, <=, >=


$i==20;$j==$j1;

Oprateurs logiques: && (and) || (or) ! (not)


($i==20&&$j=j1)

Concatnation de chanes
$c1="Phileas";$c2="Fogg";
$nom=$c1."".$c2;

Facilits syntaxiques
Expressions quivalentes :

$i=$i+20;
$i+=$20;
Valable pour tous les oprateurs
$nom="Phileas";

$nom.="Fogg";

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

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

Structures de contrle :
switch
switch(expression)
{
caseval1:
//blocsiexpression==val1
break;
caseval2:
//blocsiexpression==val1
break;
...
default:
//toutachou
break;
}

Boucles : do et while
while(expression)
{
//bloctantqueexpression!=0
}
A un moment donn, expression doit devenir 0
!
do
{
//bloctantqueexpression!=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<5;$i++){bloc};
NB : on peut faire des choses trs
compliques.

Instructions break et
continue
L'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


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 !

Fonctions: passage par


adresse
En 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


dclaration
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

Valeurs par dfaut


Il est possible de donner une valeur par
dfaut aux arguments: trs pratique
functionConnexion($nom=gross",
$passe="mdp",
$serveur="cortes")
{//instructions}
...
//Connexioncortes
Connexion();
//ConnexiondeAmmancortes
Connexion("amann","mdp2");
//Connexioncartier
Connexion("gross","mdp","cartier")

Fonctions et variables :
conseil du jour
Bon principe : une fonction n'accde pas
aux variables du programme appelant, et
rciproquement
Variables automatiques : apparaissent et
disparaissent avec la fonction => trs bon
Variables statiques : locales la fonction,
mais persistantes entre deux appels => bon
Variables globales : visibles partout =>
TRES MAUVAIS.

=> Se limiter aux variables automatiques

Application : formulaires HTML

Formulaires HTML: <FORM>


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)
<FORMACTION='http://cortes.cnam.fr:8080/action.php'
METHOD=GET>
Paramtrespourlarecherchedefilms:<P>
Titre:<INPUTTYPE=TEXTSIZE=20NAME='titre'><P>
Annedbut:<INPUTTYPE=TEXTSIZE=4NAME='anMin'
VALUE=1900>
Annefin:<INPUTTYPE=TEXTSIZE=4NAME='anMax'
VALUE=2100><P>
<INPUTTYPE=SUBMITVALUE='Rechercher'>
</FORM>

Transmission
Chaque champ a un nom
GET : les donnes sont transmises
dans lURL
http://cortes.cnam.fr:8080/action.php
?titre=alien&
anMin=1950&anMax=2001

POST : transmission dans le protocole


HTTP (invisible sur lURL)

Champs de formulaire :
<INPUT>
Trs gnral: saisie de texte, ou choix
dans des listes. L'attribut TYPE vaut:

TEXT pour les chanes de caractres


HIDDEN pour les champs cachs
CHECKBOX pour un choix multiple
RADIOBOX pour un choix exclusif
SUBMIT pour dclencher l'action
FILE pour transmettre un fichier

Champs <SELECT>
Permet de choisir une ou plusieurs
valeurs dans une liste
<SELECTNAME='realisateur'SIZE=3>
<OPTIONVALUE=1>AlfredHitchcock
<OPTIONVALUE=2SELECTED>MauricePialat
<OPTIONVALUE=3>QuentinTarantino
</SELECT>

L'option MULTIPLE permet de


slectionner plusieurs valeurs

Champ <TEXTAREA>
Pour entrer du texte libre:
<TEXTAREANAME='resume'
COLS=30
ROWS=3>
Rsumdufilm
</TEXTAREA>

L'attribut MAXLENGTH indique la


longueur maximale du text.

Un formulaire complet

(dmo)

<FORMACTION="http://cortes.cnam.fr:8080/ExPHP1.php"
METHOD=POST>
<INPUTTYPE="HIDDEN"NAME="monNom"VALUE="ExFormFilm">
Titre:<INPUTTYPE=TEXTSIZE=20NAME="titre">
Anne:<INPUTTYPE=TEXTSIZE=4MAXLENGTH=4NAME="annee">
<P>
Comdie:<INPUTTYPE=CHECKBOXNAME='genre'VALUE='C'>
Drame:<INPUTTYPE=CHECKBOXNAME='genre'VALUE='D'>
Histoire:<INPUTTYPE=CHECKBOXNAME='genre'VALUE='H'>
Suspense:<INPUTTYPE=CHECKBOXNAME='genre'VALUE='S'>
<P>
France:<INPUTTYPE=RADIONAME='pays'VALUE='FR'CHECKED>
EtatsUnis:<INPUTTYPE=RADIONAME='pays'VALUE='US'>
Allemagne:<INPUTTYPE=RADIONAME='pays'VALUE='DE'>
Japon:<INPUTTYPE=RADIONAME='pays'VALUE='JP'>
<P>
Affichedufilm:<INPUTTYPE=FILESIZE=20NAME='affiche'>

Un formulaire complet
(suite)
Metteurenscne:
<SELECTNAME='realisateur'SIZE=3>
<OPTIONVALUE=1>AlfredHitchcock
<OPTIONVALUE=2>MauricePialat
<OPTIONVALUE=3SELECTED>QuentinTarantino
<OPTIONVALUE=4>AkiraKurosawa
<OPTIONVALUE=5>JohnWoo
<OPTIONVALUE=6>TimBurton
</SELECT>
<P>
Rsum:<TEXTAREANAME='resume'COLS=30ROWS=3>Rsum
</TEXTAREA>
<H1>Votrechoix</H1>
<INPUTTYPE=SUBMITVALUE='Valider'>
<INPUTTYPE=RESETVALUE='Annuler'>
</FORM>

Traitement des donnes en


PHP
On rcupre, sous forme de variable
PHP, les champs d'un formulaire
Pour les valeurs scalaires -> un variable
Pour 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
<?phpif($anne<1920)echoDesole,ona
pas.;?>

Passage de valeurs
multiples (dmo)
<FORMACTION="http://cartier/ITCE/EXEMPLES/ExPHP2.php"
METHOD=POST">
Titre:<INPUTTYPE=TEXTSIZE=20NAME="titre">
<TABLE><TR><TH>Prnom</TH><TH>Nom</TH></TR>
<TR><TD><INPUTTYPE=TEXTSIZE=30NAME="prenom[]">
<TD><INPUTTYPE=TEXTSIZE=30NAME="nom[]">
<TR><TD><INPUTTYPE=TEXTSIZE=30NAME="prenom[]">
<TD><INPUTTYPE=TEXTSIZE=30NAME="nom[]">
<TR><TD><INPUTTYPE=TEXTSIZE=30NAME="prenom[]">
<TD><INPUTTYPE=TEXTSIZE=30NAME="nom[]">
</TABLE>
<H1>Votrechoix</H1>
<INPUTTYPE=SUBMITVALUE='Valider'>
<INPUTTYPE=RESETVALUE='Annuler'>
</FORM>

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

Une boucle sur les tableaux permet


de rcuprer les valeurs.

<?php
echo"Pourlefilm$titrej'aireulesacteurs
suivants:<P>\n";
$nbActeurs=count($prenom);
for($i=0;$i<$nbActeurs;$i++)
echo"<B>$prenom[$i]$nom[$i]<B><BR>\n";
?>

-> A utiliser aussi pour les champs


SELECT multiples.

Transmission de fichiers
<FORMACTION="http://cartier/ITCE/EXEMPLES/ExPHP3.php"
METHOD=POST"ENCTYPE="multipart/formdata">
<INPUTTYPE="hidden"name="MAX_FILE_SIZE"value="100000">
Titre:<INPUTTYPE=TEXTSIZE=20NAME="titre">
<P>

Affiche:<INPUTTYPE=FILESIZE=20NAME='affiche'>

<H1>Votrechoix</H1>
<INPUTTYPE=SUBMITVALUE='Valider'>
<INPUTTYPE=RESETVALUE='Annuler'>
</FORM>

Transmission de fichiers
Le fichier est transmis sur le serveur avec
quelques variables qui le dcrivent:
<?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");
?>

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 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 HTML


Question : 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
dedans
Mais ... le code est ILLISIBLE

Pour PHP : on programme des utilitaires


pour produire du HTML
Le code est lisible ... pour les informaticiens.

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

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

Produit :
<AHREF=http://www.truc.org/maison.htmlCLASS=>
<IMGSRC=maison.gifBORDER=0>
</A>

Cration 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

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

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

Fonction affichant un entte : 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();

Au dbut de chaque page ...


<?php
require("Design.php");
$titre = "Commerce Electronique";
$menu = array ("Accueil" => "index.php",
"Documentation" => "Documentation.php",
"Cours" => "Cours.php",
"Travaux dirigs" => "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" !

Et la programmation objet ?
Notion de classes en Php
Rassembler en un objet formulaire
toutes les informations necessaires

De nombreux exemples sur le site


http://cartier.cnam.fr:8080

Les cookies
Le 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 cre
MonNavi transmet MonServeur la
variable sous la forme MaVariable=100

Cookies et sessions web


Les cookies sont essentiels pour tablir une
continuit dans le dialogue client/serveur
Quand un client se connecte la premire 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.

Gestion de session avec


cookie
Client

Premire
connexion

Cration
d'une session

Cration du cookie

Infos.
session

id=100 Client
Envoi du cookie

Client
Validit

id=100

On sait de
qui il s'agit

Envoi du cookie
Serveur

Fonctions Php pour


sessions
session_start() :
identifie ou cre la session
si existe dj, recre toutes les variables
Php associes
doit tre appel au dbut du script Php

session_destroy()
dtruit les information associe la session

Fonctions Php pour


sessions
session_id()
renvoie lidentifiant de la session

session_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


<?php
Session_start();

$derniereVisite=date(h:i:s);
session_register(toto);
?>
Une visite de cette page ->mmorisation
de $toto dans le navigateur

Exemple (2/2) : truc.php


<?php
session_start();
if(session_is_registered(toto))
echohaha!Vousavezvisitela
pagedoc.phple$toto;
else
echopremierevisite;
?>

Conclusion
PHP :
langage puissant, trs bien intgr HTML
de trs nombreuses fonctions
gratuit

Permet :
la gestion des formulaires
la gestion des utilisateurs du site (session)
et prochainementbases de donnes !

Vous aimerez peut-être aussi