Vous êtes sur la page 1sur 63

Programmation Web :

PHP

Avec l'aimable autorisation de


Jérôme CUTRONA
PHP: Langage de script pour le Web

 Qu’est-ce que PHP ?


 Langage de script. Utilisé coté serveur
 Acronyme récursif : PHP: Hypertext Preprocessor
 Créé en 1994-1995 par Rasmus Lerdorf
 Extension utilisée sur certains serveurs Web (33%)
 Langage multi plate-forme (UNIX / Windows…)
 Open Source
 Versions actuelles (source nexen.net) :
 PHP4 (52% en octobre 2008)
 PHP5 (48% en octobre 2008)

10:11:04 Programmation Web 2012-2013 2


Utilité et utilisation de PHP

 Création de pages HTML « dynamiques »,


fabriquées à la volée, construite à la demande

 Interface entre un serveur Web et des bases de


données

 Création d’applications Web

10:11:04 Programmation Web 2012-2013 3


Principales fonctionnalités de PHP

 Manipulation de chaînes et tableaux


 Calendrier / dates / heures
 Fonctions mathématiques
 Accès au système de fichiers
 Manipulation d’images
 HTTP / FTP / IMAP
 Bases de données (Oracle, MySQL, …)
 XML
 …

10:11:05 Programmation Web 2012-2013 4


Fonctionnement de PHP
Requête
Rendu
Envoi
Envoi du HTTP
Localisation
Connexion
Exécution
Fermeture
graphique
Localisation
Rendu
Exécution
Fermeture
Connexion
Requête du
de
sur
de
du
code
la
résultat
graphique
du HTTP
du
de
sur
de
du du
le
la
code
code
la
résultatle
la
code
du client
connexion
serveur
des
ressource
au PHP
PHP
données
client
connexion
serveur
des (((port
ressource
auclient
PHPPHP dans
dans80)
le
le fichier
hello.php
données
client (port 80)
hello.php ))
fichier
== réponse
réponse HTTP
HTTP Client
Client
GET
GET /hello.php Navigateur
/hello.php HTTP/1.0
HTTP/1.0
Réseau
Réseau •HTML
•JavaScript
Protocole
Protocole HTTP
HTTP •CSS

Exécution
Exécution d’un
d’un programme
programme sur sur le
le serveur
serveur
<<html>
Construction
Construction de
de la
la réponse
réponse
html>
<<head
head>>
Serveur
Serveur
<<title
title>>Hello
Hello</
</title
title>> <?php
<?php
</
</head
head>>
Serveur Web .html
echo
echo <<<<<<HTML
HTML hello.php
hello.php
<<body
body>>Hello
Hello world
world</
</body
body>> <<html >
</ .php html>
</html
html>> <<head
head>>
.jpg
<<title
title>>Hello
Hello</
</title
title>>
Module PHP </
</head
head>>
<<body
body>>Hello
Hello world
world</</body
body>>
MySQL </
</html
html>>
HTML;
HTML;

10:11:05 Programmation Web 2012-2013 5


Fonctionnement de PHP

Client  Serveur

1. Connexion TCP sur le serveur (port 80)


2. Requête HTTP du client (mon_fichier.php)
3. Localisation de la ressource
4. Exécution du code PHP
5. Envoi du résultat de l’exécution au client
= réponse HTTP
6. Fermeture de la connexion
7. Rendu graphique des données (HTML, image, …)

10:11:05 Programmation Web 2012-2013 6


Programme en PHP

Délimitation du code PHP dans le fichier .php :


 <?php Code PHP ?> Fermeture
Fermeture optionnelle
optionnelle
 <script language="PHP">
Code PHP Confusion
Confusion avec
avec JavaScript
JavaScript
 àà bannir
 bannir !!!!
</script>
 <? Code PHP ?> Dépend
Dépend de
de la
short_open_tag
short_open_tag la configuration
configuration
du
du serveur
serveur
 <% Code PHP %> asp_tags
 àà bannir
asp_tags
bannir !!!!

10:11:06 Programmation Web 2012-2013 7


Eléments de syntaxe PHP

 La syntaxe de PHP ressemble à celle de famille


"C" (C, C++, Java, …)

 Chaque instruction se termine par ";"

 Commentaires:
/* jusqu’au prochain */
// jusqu’à la fin de la ligne
# jusqu’à la fin de la ligne

10:11:06 Programmation Web 2012-2013 8


Les variables et les types de données

 Tout identificateur commence par "$"


 Les affectations sont réalisées grâce à "="
 Numérique entier: 12 ou réel: 1.54

 Chaîne: "Hello" ou ’Bonjour’

 Booléen: true, false (PHP 4)

 Tableau: $tab[2]=12

 Objet (PHP4, PHP5)

 Ressource

 NULL

 Le type d’une variable est dynamique et est


déterminé par la valeur qui lui est affectée
10:11:06 Programmation Web 2012-2013 9
Typage faible. Exemple

// Pas de déclaration de variable

$test = 1.5 ; // Réel

$test = 12 ; // Entier

$test = array() ; // Tableau

$test = "10" ; // Chaîne

echo $test ; // 10

10:11:07 Programmation Web 2012-2013 10


Typage automatique. Exemple

$nombre1 = 1.5 ; // Réel


$nombre2 = 12 ; // Entier
$chaine1 = "10" ; // Chaîne
$chaine2 = 'coucou' ; // Chaîne

$total =
$nombre1 + $nombre2 + $chaine1 + $chaine2 ;
1.5
1.5 12
12 "10"
"10" 'coucou'
'coucou'

13.5
13.5 10
10

23.5
23.5 00

echo $total ; // 23.5 Réel 23.5


23.5

10:11:07 Programmation Web 2012-2013 11


Les chaînes de caractères

Substitution de variables dans les chaînes


 Guillemets simples
 $a='chaîne' ; chaîne
chaîne
 $b='voici une $a'; voici
voici une
une $a
$a
 Guillemets doubles
 $a="chaîne" ; chaîne
chaîne
 $b="voici une $a"; voici
voici une
une chaîne
chaîne
 Syntaxe HereDoc
 $a="chaîne" ;
chaîne
chaîne
 $b=<<<MARQUE_DE_FIN
voici une $a
sur deux lignes ;-) voici
voici une
une chaîne
chaîne
MARQUE_DE_FIN; sur
sur deux
deux lignes
lignes ;-)
;-)
10:11:07 Programmation Web 2012-2013 12
Concaténation de chaînes

 Permet d’assembler plusieurs chaînes


 Réalisé grâce à l’opérateur point : .
"Bonjour " . "Marcel"
 vaut "Bonjour Marcel"

$nb = 6*2 ;
"Acheter " . $nb . " oeufs"
 vaut "Acheter 12 oeufs"

10:11:08 Programmation Web 2012-2013 13


La commande echo

 Permet d’envoyer du texte au navigateur du


client (« écrire » la page au format HTML
résultant de l’interprétation de PHP)
 echo "Bonjour" ;
 $nom="Marcel" ; echo "Bonjour $nom" ;

 Plus généralement, permet d’envoyer des octets


au navigateur du client
 Ficher HTML, XML, CSS, JavaScript, …
 Données d'une image
 Contenu d'un ficher PDF, Flash, etc.
10:11:08 Programmation Web 2012-2013 14
Hello world !
Interprétation
Interprétation du
du code
code PHP
PHP sur
sur le
le serveur
serveur
<?php
<?php et
et Serveur du
transmission
transmission du résultat
résultat au
au Navigateur
client
client
$$debut
debut == <<<
<<<HTML
HTML
<<html
html>> <<html
html>>
<<head
head>> <<head
head>>
<<title
title>>hello
hello</
</title
title>> <<title
title>>hello
hello</
</title
title>>
</
</head
head>> </
</head
head>>
<<body
body>>\n
\n <<body
body>>
HTML
HTML;; Hello
Hello world!
world!
$$corps
corps == ""Hello
Hello world!
world!\n
\n";
"; </
</body
body>>
$$fin
fin == <<<
<<<HTML
HTML </
</html
html>>
</
</body
body>>
</
</html
html>>
HTML
HTML;;
/*
/* Envoi
Envoi auau client
client */
*/
echo
echo $$debut
debut.$
.$corps
corps.$
.$fin
fin ;;

Impossible
Impossible de
de voir
voir le
le code
code PHP
PHP depuis
depuis le
le navigateur
navigateur !!
!!
10:11:08 Programmation Web 2012-2013 15
Les opérateurs arithmétiques

$a + $b Somme

$a - $b Différence

$a * $b Multiplication

$a / $b Division

$a % $b Modulo (Reste de la division entière)

10:11:09 Programmation Web 2012-2013 16


Les opérateurs d’in- et de
dé-crémentation pré- et post-fixés

Retourne la valeur de $a puis augmente la


$a++
valeur de $a de 1
Augmente la valeur de $a de 1 puis
++$a retourne la nouvelle valeur de $a
Retourne la valeur de $a puis diminue la
$a--
valeur de $a de 1
Diminue la valeur de $a de 1 puis retourne
--$a la nouvelle valeur de $a

10:11:09 Programmation Web 2012-2013 17


Les opérateurs de comparaison

$a== $b Vrai si égalité entre les valeurs de $a et $b

$a != $b Vrai si différence entre les valeurs de $a et $b

$a < $b Vrai si $a inférieur à $b

$a > $b Vrai si $a supérieur à $b

$a <= $b Vrai si $a inférieur ou égal à $b

$a >= $b Vrai si $a supérieur ou égal à $b

$a === $b Vrai si $a et $b identiques (valeur et type)

$a !== $b Vrai si $a et $b différents (valeur ou type)

10:11:09 Programmation Web 2012-2013 18


Les opérateurs logiques

[Expr1]and [Expr2] Vrai si [Expr1] et [Expr2] sont vraies

[Expr1] && [Expr2] idem

[Expr1] or [Expr2] Vrai si [Expr1] ou [Expr2] sont vraies

[Expr1] || [Expr2] idem


Vrai si [Expr1] ou [Expr2] sont vraies
[Expr1] xor [Expr2]
mais pas les deux
! [Expr1] Vrai si [Expr1] est non vraie

10:11:10 Programmation Web 2012-2013 19


Les opérateurs sur bits

$a & $b ET binaire

$a | $b OU binaire

$a ^ $b XOR binaire

~ $a Inversion bit à bit

$a << $b $a décalé à gauche de $b rangs


$a >> $b $a décalé à droite de $b rangs

10:11:10 Programmation Web 2012-2013 20


Précédence des opérateurs

10:11:10 Programmation Web 2012-2013 21


Précédence des opérateurs

En
En cas
cas de
de doute,
doute,
utilisez
utilisez les
les parenthèses
parenthèses ;-)
;-)

10:11:11 Programmation Web 2012-2013 22


Structure de contrôle Si…Alors…Sinon…
if (condition)
{
/* Bloc d’instructions exécuté si la
condition est vraie */
}
[else
{
/* Bloc d’instructions exécuté si la
condition est fausse */
}]

10:11:11 Programmation Web 2012-2013 23


Structure de contrôle Tant que… faire…

while (condition)
{
/* Bloc d’instructions répété tant que la
condition est vraie */
}

do {
/* Bloc d’instructions exécuté une fois
puis répété tant que la condition est
vraie */
} while (condition) ;

10:11:11 Programmation Web 2012-2013 24


Structure de contrôle Tant que… faire…
for(avant; condition; fin_chaque_itération)
{ /* Bloc d’instructions répété tant que la
condition est vraie */
}

Équivalent à:

avant ;
while (condition)
{ /* Bloc d’instructions répété tant que la
condition est vraie */
fin_chaque_itération ;
}

10:11:12 Programmation Web 2012-2013 25


Structure de contrôle switch…

switch (val)
{
case v1:
instructions exécutées si val==v1
case v2:
instructions exécutées si val==v2
ou si val==v1

default:
instructions dans tous les cas
}

10:11:12 Programmation Web 2012-2013 26


L’instruction break

Permet de sortir d’une structure de contrôle


switch (val)
{
case v1:
instructions exécutées si val==v1
break ; /* On sort du switch si val==v1 */
case v2:
instructions exécutées si val==v2
ou si val==v1
break ; /* On sort du switch si val==v2 */

default:
instructions exécutées dans tous les cas
si val!=v1 et val!=v2
}

10:11:12 Programmation Web 2012-2013 27


Les tableaux

 Création / initialisation:
$tab1=array(12, "fraise", 2.5) ;

$tab2[] = 12 ;
Clé Valeur
$tab2[] = "fraise" ;
0 12
$tab2[] = 2.5 ;
1 "fraise"
2 2.5
$tab3[0] = 12 ;
$tab3[1] = "fraise" ;
$tab3[2] = 2.5 ;
10:11:13 Programmation Web 2012-2013 28
Les tableaux « à trous »

 Les éléments du tableaux ne sont pas forcement


d’indices consécutifs :
Clé Valeur
$tab4[0] = 12 ; 0 12
$tab4[1] = "fraise" ; 1 "fraise"
$tab4[2] = 2.5 ; 2 2.5
$tab4[5] = "el5" ; 3
4
5 "el5"

 Comment parcourir de tels tableaux ?

10:11:13 Programmation Web 2012-2013 29


Les tableaux « à trous » (suite)
Parcours classique : 4
for ($i=0; $i < sizeof($tab4); $i++)
{ echo "tab4[$i]: "
. $tab4[$i] . "<BR>\n";
} Clé Valeur
0 12
1 "fraise"
2 2.5
3
4
? 5 "el5"
10:11:13 Programmation Web 2012-2013 30
Structure de contrôle Pour chaque…

foreach ($tableau as $element)


{
/* Bloc d’instructions répété pour
chaque élément de $tableau */
/* Chaque élément de $tableau est
accessible grâce à $element */
}

10:11:14 Programmation Web 2012-2013 31


Parcours de tableau : foreach

PHP … HTML
… Val:12<br>\n
$tab4[0] = 12 ; Val:fraise<br>\n
$tab4[1] = "fraise" ; Val:2.5<br>\n
$tab4[2] = 2.5 ; Val:el5<br>\n

$tab4[5] = "el5" ;
foreach($tab4 as $v)
{ Navigateur
echo "Val: $v<br>\n";
}

10:11:14 Programmation Web 2012-2013 32


Tableaux associatifs
 Tableaux dont l’accès aux éléments n’est plus
réalisé grâce à un index (0,1,…) mais grâce à une
clé de type entier ou chaîne.
 Exemples de clés:
$tab['un'] = 12 ;
$tab[205] = "bonjour" ;
$tab["la valeur"] = 3.0 ;
 Création
$tab = array(cle1 => val1,
cle2 => val2,
…);
10:11:14 Programmation Web 2012-2013 33
Tableaux associatifs - Exemples

$tab5['un'] = 12 ;
$tab5['trois'] = "fraise" ;
Clé Valeur
$tab5["deux"] = 2.5 ;
"un" 12
$tab5[42] = "el5" ;
"trois" "fraise"
"deux" 2.5
42 "el5"

$tab6 = array('un' => 12,


'trois' => "fraise",
"deux" => 2.5,
42 => "el5") ;

10:11:15 Programmation Web 2012-2013 34


Structure de contrôle Pour chaque…

foreach($tableau as $cle => $element)


{
/* Bloc d’instructions répété pour
chaque élément de $tableau */
/* Chaque élément de $tableau est
accessible grâce à $element */
/* La clé d’accès à chaque élément est
donnée par $cle */
}

10:11:15 Programmation Web 2012-2013 35


Parcours de tableau
<?php
<?php
$$html
html == <<<
<<<HTML
HTML
<<html
html>>
<<head
head><
><title
title>>foreach
foreach cléclé</
</title
title>>
</
</head
head>>
<<body
body>>
HTML
HTML;;
$$tab6
tab6 == array
array((''un
un'' =>
=> 12
12,,
''deux
deux'' =>
=> ""fraise
fraise", ",
""trois
trois"" => => 2.5
2.5,,
""quatre
quatre"" =>=> ""el5
el5"")) ;;
foreach
foreach (($$tab6
tab6 as as $$cle
cle =>=> $$val
val))
{{
$$html
html .=
.= ""tab[
tab[$$cle
cle]:
]: $$val
val<br>
<br>\n\n"" ;;
}}
echo
echo $$html
html .. ""</
</body
body>\n</
>\n</html
html>>"" ;;

10:11:15 Programmation Web 2012-2013 36


Exemple de génération de code HTML
<?php
<?php
$$html
html == <<<<<<HTML
HTML
<!DOCTYPE
<!DOCTYPE html html PUBLIC
PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML
HTML 4.01
4.01
Transitional//EN">
Transitional//EN">
<<html
html>>
<<head
head>>
<<meta
meta http-equiv
http-equiv=="Content-Type"
"Content-Type"
content
content=="text/html;
"text/html; charset=iso-8859-1"
charset=iso-8859-1">>
<<title
title>Boucle</
>Boucle</titletitle>>
</
</head
head>>
<<body
body>>
HTML;
HTML;
for
for (($$ii==1;
1; $$ii<<20;
20; $$ii++++)) {{
$$html
html .=.= ""Le
Le serveur
serveur compte...
compte... ""
.. $$ii .. ""<br>
<br>\n"\n" ;;
}}
$$html
html .= .= <<<
<<<HTML
HTML
</ body
</body> >
</
</html
html>>
HTML;
HTML;
echo
echo $$html
html ;;

10:11:16 Programmation Web 2012-2013 37


Traitement des données de formulaires

 PHP permet de traiter les données saisies grâce


à un formulaire HTML si le champ ACTION du
formulaire désigne une page PHP du serveur.

 Après récupération par le serveur Web, les


données sont contenues dans l'une des variables
superglobales de type tableau associatif $_GET
ou $_POST (ou $_REQUEST).

 La valeur peut être trouvée grâce à une clé qui


porte le même nom que le champs du formulaire
de la page HTML de saisie.
10:11:16 Programmation Web 2012-2013 38
Traitement des données de formulaires
Client
Client
Réseau
Réseau Navigateur
•HTML
nomPers=robert
nomPers=robert •JavaScript
•CSS

<<html
html>>
<<head
head>>
Serveur
Serveur nomPers
<<title
title>>bonjour
bonjour</
</title
title>> nomPers
</
</head
head>>
Serveur
<<body Web <?php
<?php
body>>
Bonjour $$html
html == <<<
<<<HTML
HTML
Bonjour robert
robert !!
</ < html
<html>>
</body
body>>
</ html <<head
head><
><title
title>>bonjour
bonjour</ </title
title></></head
head>>
html>> PHP
Module
</
<<body
body>>
HTML
HTML;;
$$html
html .=.= ""Bonjour
Bonjour "".$
.$_GETrobert
robert
_GET[[''nomPers
nomPers'']].."" !!\n
\n"" ;;
echo
echo $$html
html .. ""</
</body
body>>\n
\n</
</html
html>>"" ;;

10:11:17 Programmation Web 2012-2013 39


Exemple – Formulaire HTML
<!DOCTYPE
<!DOCTYPE html
html PUBLIC
PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML
HTML 4.01
4.01 Transitional//EN">
Transitional//EN">
<<html
html>>
<<head
head>>
<<title
title>>formulaire
formulaire</ </title
title>>
</
</head
head>>
<<body
body>>
<<form
form action
action==""valide1.php
valide1.php"" method
method==""get
get"">>
Nom:
Nom: <<input
input type
type==""text
text"" name
name==""nomPers
nomPers"">>
<<input
input type
type==""submit
submit"" value
value==""Envoyer
Envoyer"">>
</
</form
form>>
</
</body
body>>
</
</html
html>>

10:11:17 Programmation Web 2012-2013 40


Exemple – Traitement en PHP
<?php
<?php
$$html
html == <<<
<<<HTML
HTML
<!DOCTYPE
<!DOCTYPE html PUBLIC
html PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML
HTML 4.01
4.01 Transitional//EN">
Transitional//EN">
<<html
html>>
<<head
head>>
<<title
title>>Validation
Validation</
</title
title>> $$_GET
_GET[[''nomPers
nomPers'']]
</
</head
head>>
<<body >
est-il
est-il défini
défini ??
body>
HTML
HTML;;
if
if ((isset
isset(($$_GET
_GET[[''nomPers
nomPers'']]))
)) $$_GET
_GET[[''nomPers
nomPers'']]
{{
if est-il
est-il vide
vide ??
if ((!!empty
empty(($$_GET
_GET[[''nomPers
nomPers'']]))
))
{{
$$html
html .=.= ""Vous
Vous avez
avez saisi
saisi ''""
.$
.$_GET
_GET[[''nomPers
nomPers'']]..""''\n
\n"" ;;
}}
else
else
$$html
html .=.= ""Aucune
Aucune valeur
valeur saisie
saisie\n \n";";
}}
else
else
$$html
html .=
.= ""Utilisation
Utilisation incorrecte
incorrecte\n \n"" ;;
echo
echo $$html
html .. ""</
</body
body>>\n
\n</
</html
html>>"" ;;
10:11:17 Programmation Web 2012-2013 41
Formulaires contenant des champs
« SELECT »

10:11:18 Programmation Web 2012-2013 42


Formulaires contenant des champs
« SELECT unique»
<!DOCTYPE
<!DOCTYPE html
html PUBLIC
PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML
HTML 4.01
4.01 Transitional//EN">
Transitional//EN">
<<html
html>>
<<head
head>>
<<title
title>>Formulaire
Formulaire de de saisie
saisie des
des fruits
fruits</ </title
title>>
</
</head
head>>
<<body
body>>
<<form
form action
action==""valide3.php
valide3.php"" method
method==""get
get"">>
Choisissez
Choisissez desdes fruits:
fruits:&nbsp;
&nbsp;
<<select
select name
name==""sel
sel"">>
<<option
option>>Fraise
Fraise
<<option
option>>Pomme
Pomme
<<option
option>>Poire
Envoyer Poire
Envoyer
<<option
option>>Banane
Banane
<<option
option>>Cerise
Cerise
</
</select
select>>
<<input
input type
type==""submit
submit"" value
value==""envoyer
envoyer"">>
</
</form
form>>
</
</body
body>> valide3.php?
valide3.php?sel=Pomme
sel=Pomme
</ html
</html>>

10:11:18 Programmation Web 2012-2013 43


Formulaires contenant des champs
« SELECT multiple»
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="valide3.php" method="get">
Choisissez des fruits:&nbsp;
<select name="sel" multiple>
<option>Fraise
<option>Pomme
<option>Poire
Envoyer
< option>Banane
Envoyer
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
</body>
</html>
valide3.php?
valide3.php?sel=Pomme&sel=Poire
sel=Pomme&sel=Poire ???
???
10:11:18 Programmation Web 2012-2013 44
Formulaires contenant des champs
« SELECT multiple»
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="valide3.php" method="get">
Choisissez des fruits:&nbsp;
<select name="sel[]" multiple>
<option>Fraise
<option>Pomme
<option>Poire
Envoyer
Envoyer
<option>Banane
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
valide3.php?
valide3.php?sel%5B%5D=Pomme&sel%5B%5D=Poire
sel%5B%5D=Pomme&sel%5B%5D=Poire
</body>
</html> valide3.php?
valide3.php?sel[]=Pomme&sel[]=Poire
sel[]=Pomme&sel[]=Poire
10:11:19 Programmation Web 2012-2013 45
Traitement des données des champs
« SELECT »
<?php
<?php
$$html
html == <<<
<<<HTML
HTML
<!DOCTYPE
<!DOCTYPE html
html PUBLIC
PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML
HTML 4.01
4.01 Transitional//EN">
Transitional//EN">
<<html
html>>
<<head
head>>
<<title
title>>Liste
Liste de de fruits
fruits</ </title
title>> $$_GET
</ head > _GET[[‘‘sel
sel'']]
</head>
<<body
body>>
est
est un
un tableau
tableau
HTML
HTML;;
if
if ((isset
isset(($$_GET
_GET[[''sel
sel''])
]) &&&& !!empty
empty(($$_GET
_GET[[''sel
sel'']))
]))
{{/* La variable $_GET['sel'] est
/* La variable $_GET['sel'] est définie définie
et
et elle
elle n'est
n'est paspas vide
vide */*/
foreach
foreach(($$_GET
_GET[[''sel
sel'']] as
as $$fruit
fruit))
$$html
html .= .= ""Vous
Vous avez
avez choisi
choisi $$fruit
fruit<br>
<br>\n
\n"" ;;
}}
else
else
$$html
html .=.= ""Vous
Vous n'avez
n'avez paspas choisi
choisi dede fruit
fruit\n\n"" ;;
echo
echo $$html
html .. ""</
</body
body>>\n
\n</
</html
html>>"" ;;

10:11:19 Programmation Web 2012-2013 46


Résultat

10:11:19 Programmation Web 2012-2013 47


Formulaires contenant des champs
« CHECKBOX »

10:11:20 Programmation Web 2012-2013 48


Formulaires contenant des champs
« CHECKBOX »
<!DOCTYPE
<!DOCTYPE html
html PUBLIC
PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML HTML 4.01
4.01 Transitional//EN">
Transitional//EN">
<<html
html>>
<<head
head>>
<<title
title>>Formulaire
Formulaire de de saisie
saisie desdes fruits
fruits</
</title
title>>
</
</head
head>>
<<body
body>>
<<form name==""formu
form name formu"" action
action==""valide3.php
valide3.php"" method
method==""get
get"">>
Choisissez
Choisissez desdes fruits
fruits&nbsp;
&nbsp;:< :<br
br>>
<<input type==""checkbox
input type checkbox"" name
name==""sel[]
sel[]"" value
value==""Fraise
Fraise"">Fraise<
>Fraise<brbr>>
<<input type==""checkbox
input type checkbox"" name
name==""sel[]
sel[]"" value
value==""Pomme
Pomme"" >Pomme
>Pomme <<br
br>>
<<input type==""checkbox
input type checkbox"" name
name==""sel[]
sel[]"" value
value==""Poire
Poire"" >Poire
>Poire <<br
br>>
<<input type==""checkbox
input type checkbox"" name
name==""sel[]
sel[]"" value
value==""Banane
Banane"">Banane<
>Banane<brbr>>
<<input type==""checkbox
input type checkbox"" name
name==""sel[]
sel[]"" value
value==""Cerise
Cerise"">Cerise<
>Cerise<brbr>>
<<input type==""submit
input type submit"" value
value==""Envoyer
Envoyer"">>
</
</form
form>>
</
</body
body>>
</
</html
html>>

10:11:20 Programmation Web 2012-2013 49


Résultat

10:11:20 Programmation Web 2012-2013 50


Références

$a = 12 ;
$b = $a ; $$aa 84
12
12
84
$c = &$a ; $$bb ""coucou
12coucou""
$b = "coucou" ; $$cc ""hello
hello""
$c = 84 ;
echo
$a "\$a : $a\n"
$a :: 84
84 ;
echo
$b "\$b : $b\n"
$b :: coucou
coucou ;
echo
$c "\$c : $c\n"
$c :: 84
84
;
unset($c) ;
$c = "hello" ;
10:11:21 Programmation Web 2012-2013 51
Fonctions utilisateur

 Description d’une fonctionnalité dépendant


éventuellement de paramètres et retournant
éventuellement un résultat
 Définition
function moyenne($a,$b)
{
return ($a+$b)/2. ;
}
 Utilisation
$resultat = moyenne(2,4) ;
echo $resultat ; // vaut 3

10:11:21 Programmation Web 2012-2013 52


Fonctions utilisateur

 Valeur de retour
function moyenne($a,$b)
{ … }
Typage
Typage faible
faible de
de PHP
PHP ::
Aucune
Aucune information
information
 Arguments
function moyenne( $a, $b)
{ … }

Typage
Typage faible
faible de
de PHP
PHP ::
Aucune
Aucune information
information

10:11:22 Programmation Web 2012-2013 53


Mode de passage des arguments (types natifs)
<?php
function permutation($x, $y) {
echo "permutation..." ;
$t = $x ;
$x = $y ;
Permutation
Permutation impossible
impossible ::
$y = $t ;
Passage
Passage des
des arguments
arguments
} des
des fonctions
fonctions par
par valeur
valeur
$a = 12 ;
$b = 210 ;
echo "\$a = $a" ; $a
$a == 12
12
echo "\$b = $b" ; $b
$b == 210
210
permutation($a, $b) ; permutation...
permutation...
echo "\$a = $a" ; $a
$a == 12
12
echo "\$b = $b" ; $b
$b == 210
210
?>

10:11:22 Programmation Web 2012-2013 54


Mode de passage des arguments (types natifs)
<?php
function permutation(&$x, &$y) {
echo "permutation..." ;
$t = $x ;
$x = $y ; Permutation
Permutation
$y = $t ;
réussie
réussie
}
$a = 12 ;
$b = 210 ;
echo "\$a = $a" ; $a
$a == 12
12
echo "\$b = $b" ; $b
$b == 210
210
permutation($a, $b) ; permutation...
permutation...
echo "\$a = $a" ; $a
$a == 210
210
echo "\$b = $b" ; $b
$b == 12
12
?>

10:11:22 Programmation Web 2012-2013 55


Arguments par défaut des fonctions

 Valeur par défaut d’un argument s’il n’a pas été


défini lors de l’appel de la fonction
function bonjour($nom="inconnu")
{ echo "Bonjour cher $nom" ; }

 Utilisation
bonjour() ;
Bonjour
Bonjour cher
cher inconnu
inconnu

bonjour("Marcel") ;
Bonjour
Bonjour cher
cher Marcel
Marcel
10:11:23 Programmation Web 2012-2013 56
Définition de fonctions fréquemment utilisées

 Certaines fonctions sont utilisées dans plusieurs


scripts PHP
 Comment faire pour ne pas les définir dans
chacune des pages ?
 Utilisation de :
 include("fichier") ;
 require("fichier") ;
 include_once("fichier") ;
 require_once("fichier") ;
 Permet d’inclure le contenu de fichier dans
le script courant

10:11:23 Programmation Web 2012-2013 57


include et require
Fichier
Fichier utilisation1.php
utilisation1.php

Fichier
Fichier mafonction.php
mafonction.php require("mafonction.php")
<? mafonction(true) ;
function mafonction($arg) …
{
if (isset($arg)) Fichier
Fichier utilisation2.php
utilisation2.php
{
echo ("Vrai") ; …
} include("mafonction.php")
else …
{ $var=false ;
echo ("Faux") ; mafonction($var) ;
} …
}
?> Fichier
Fichier utilisation3.php
utilisation3.php

require("mafonction.php")

10:11:23 Programmation Web 2012-2013 58


Définition de constantes

<?php
define("ma_constante", "Bonjour à tous") ;

nom
nom valeur
valeur
Définition
Définition d'une
d'une constante
constante

echo ma_constante ;
?>

Utilisation
Utilisation de
de la
la constante
constante

10:11:24 Programmation Web 2012-2013 59


Gestion des erreurs
 Dans certains cas, il n’est ni possible ni utile de
poursuivre l’exécution du code PHP (variables
non définies, valeurs erronées, échec de
connexion, …)
 Arrêt brutal de l’exécution du code:
 die(message)
 exit(message)
Envoie message au navigateur et termine
l’exécution du script courant

10:11:24 Programmation Web 2012-2013 60


Gestion des erreurs – (Mauvais) Exemple
<?php PHP <html> HTML
$html = <<<HTML <head>
<html> <title>die-exit</title>
<head> </head>
<title>die-exit</title> <body>
</head> problème val
<body>
HTML;
if (!isset($val)) {
HTML
die($html."problèmeHTML
non
non
val") ; valide…
valide …
/* Au delà de ce point, Navigateur
fin du script */
} problème val
$html .= <<<HTML
Choix: $val
</body>
</html>

10:11:24 Programmation Web 2012-2013 61


Gestion de l'affichage des erreurs

 int error_reporting ( [int level] )


Constante
Ancien
Ancien niveau
niveau d'erreur
d'erreur E_ERROR
E_WARNING
Sur
Sur un
un serveur
serveur en en

Débogage
production, E_PARSE
production, toute
toute
erreur
erreur affichée
affichée E_NOTICE
donne
donne des des indices
indices sursur E_CORE_ERROR
les
les scripts
scripts et
et rend
rend le le E_CORE_WARNIN
site
site vulnérable
vulnérable G
E_COMPILE_ERR
php.ini
php.ini OR
display_errors
display_errors boolean
boolean E_COMPILE_WAR
10:11:24
NING
Programmation Web 2012-2013 62
Opérateur de contrôle d'erreur

$v = file("dummy.txt") Fichier
Fichier absent
absent
or die("Problème de lecture") ;
Warning
Warning:: file(dummy.txt):
file(dummy.txt): failed
failed to
to open
open
stream:
stream: No
No such
such file
file or
or directory
directory in
in
dummy.php
dummy.php on
on line
line 68
68
Problème
Problème de
de lecture
lecture

$v = @file("dummy.txt")
or die("Problème de lecture") ;
Problème
Problème de
de lecture
lecture

10:11:25 Programmation Web 2012-2013 63

Vous aimerez peut-être aussi