Académique Documents
Professionnel Documents
Culture Documents
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
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
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
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.
Production de HTML
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";
Expressions
Expression = tout ce qui a une valeur.
En PHP, comme en C, presques toutes les
instructions ont une valeur.
10;
$i=10;
$i;
Oprateurs
Oprateurs arithmtiques: +, -, *, /
$i=20;$i=($i+2)*34;
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 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.
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
Champs de formulaire :
<INPUT>
Trs gnral: saisie de texte, ou choix
dans des listes. L'attribut TYPE vaut:
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>
Champ <TEXTAREA>
Pour entrer du texte libre:
<TEXTAREANAME='resume'
COLS=30
ROWS=3>
Rsumdufilm
</TEXTAREA>
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>
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>
<?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";
?>
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");
?>
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
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";
}
Et la programmation objet ?
Notion de classes en Php
Rassembler en un objet formulaire
toutes les informations necessaires
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
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
session_destroy()
dtruit les information associe la session
session_register(nomVar)
associe une variable Php la session
-> cette variable sera retrouve
chaque session
session_is_registered(nomVar)
test lexistence dune variable
$derniereVisite=date(h:i:s);
session_register(toto);
?>
Une visite de cette page ->mmorisation
de $toto dans le navigateur
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 !