Programmation Web :
II
Msc Alain SHIKANEZA
shikalaine@[Link]
[Link] Programmation Web II 1
INTRODUCTION
Dans ce cours de programmation Web
II, Nous allons apprendre les notions
de création des sites /applications
web dynamiques .Mais avant
d’aborder le site/application web
dynamique ,un petit rappel sur le site
web statique.
[Link] Programmation Web II 2
INTRODUCTION
Ce cours vous permet d’acquérir toutes les compétences
nécessaires pour
exercer le métier de développeur web full-stack. Vous
serez capable de gérer la création d’un site web à la fois
côté utilisateur (front-office) et côté administrateur (back-
office)
[Link] Programmation Web II 3
INTRODUCTION
Vous apprendrez les langages nécessaires au
développement d'interfaces web (HTML5 et
CSS3) vous serez également capable de créer des
[Link] Programmation Web II 4
INTRODUCTION
Vous serez capable de :
Maquetter et réaliser des interfaces utilisateur web
Développer la partie dynamique
[Link]
des interfaces utilisateur web
Programmation Web II 5
SITE WEB STATIQUE
Les sites Web statiques contiennent un
nombre fixe de pages et le format de page
Web est fixe et fournit des informations
au client. Il n’y pas d’interaction avec le
client , Ce juste pour lire. Ces sites Web
utilisent des langages côté client tels que
HTML et CSS, etc.
[Link] Programmation Web II 6
UN SITE WEB DYNAMIQUE
Un site Web dynamique est un site Web dont le contenu
change en fonction de la demande de l'utilisateur. Ce
n'est pas juste pour lire. Au lieu de cela, il fournit plus
d'interaction utilisateur et de fonctionnalités. Ces sites
Web utilisent des langages côté client tels que HTML et
CSS, ainsi que des langages de script côté serveur tels
que [Link], PHP, JSP (Java Server Pages) et Python pour
développer les pages. Ils sont associées à une base de
données.
Notons qu’un site web dynamique a deux parties:
Partie visiteur
Partie administrateur
[Link] Programmation Web II 7
TABLE DE COMPARAISON
Pages Web statiques Pages Web dynamiques
Présentation Les pages Web statiques Les pages Web
resteront les mêmes jusqu’à ce dynamiques sont
que quelqu’un le modifie comportementales et ont
manuellement. la capacité de produire un
contenu distinct pour
différents visiteurs.
Base de données N’utilisent pas des bases de Utilisent des bases de
données données
Temps de chargement Demande moins de temps Demande plus de temps
de la page
Changement Se produit rarement Fréquemment
d’information
Complexité Simple à concevoir. Compliqué à construire.
[Link] Programmation Web II 8
LES DEUX PARTIES DU SITE WEB DYNAMIQUE(1)
Nous allons divisons le site web en deux parties.
Plusieurs etapes sont à suivre:
1)Nous allons créer un sous dossier nommé admin ou pouvant
prendre un autre nom dans notre dossier qui héberge nos fichiers
[Link] Programmation Web II 9
LES DEUX PARTIES DU SITE WEB DYNAMIQUE(1)
2)Apres la création du sous dossier nommé admin nous copions
tous les fichiers dans le sous dossier.
[Link] Programmation Web II 10
LES DEUX PARTIES DU SITE WEB DYNAMIQUE(3)
3) Etant dans le sous dossier admin ,nous créons s
le fichier accueil et nous coupons tout le
contenu du fichier index et collons dans le
fichier accueil .
4) Le fchier index est maintenant vide , nous allons
créer sur cette page un formulaire de connexion
Voici un exemple
[Link] Programmation Web II 11
A part html,css nous allons
utiliser php et mysql .Donc en
dessous nous allons
introduction php puis loin
mysql .
[Link] Programmation Web II 12
[Link] Programmation Web II 13
INTRODUCTION
[Link] Programmation Web II 14
PHP: Langage de script pour le Web
• Qu’est-ce que PHP ?
– Langage de script. Principalement utilisé côté serveur
– Créé en 1994-1995 par Rasmus Lerdorf
– Acronyme initial : Personal Home Page
– Acronyme récursif : PHP: Hypertext Preprocessor
– Extension utilisée sur ≈80% des serveurs Web
– Langage multi plate-forme (UNIX / Windows…)
– Open Source
– Versions actuelles (source [Link], 03/14) :
• PHP5 >97%
• PHP4 <3% - PHP3 <0,1%
[Link] Programmation Web II 15
Utilité et utilisation de PHP
• Création de pages Web « 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
[Link] Programmation Web II 16
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
• …
[Link] Programmation Web II 17
Programme en PHP
Délimitation du code PHP dans le fichier .php :
• <?php Code PHP ?> Fermeture
Fermeture optionnelle
optionnelle
est
est déconseillée
déconseillée
• <script language="PHP">
Confusion
Confusion avec
avec JavaScript
JavaScript
Code PHP àà bannir
bannir !!!!
</script>
short_open_tag
short_open_tag
• <? Code PHP ?>
asp_tags
asp_tags Dépend
Dépend dede la
la
• <% Code PHP %> configuration
configuration
du
du serveur
serveur
àà bannir
bannir !!!!
[Link] Programmation Web II 18
LES Fonctions Prédefies en PHP
[Link] Programmation Web II 19/154
Les Fonctions d’affichage
• Les fonctions d’affichage :
• echo() : écriture dans le navigateur
• print() : écriture dans le navigateur
• printf([$format, $arg1, $arg2]) : écriture formatée
comme en C, i.e. la chaîne de caractère est constante
et contient le format d’affichage des variables passées
en argument
• Exemples :
• echo ‘’Bonjour ’’; // Bonjour
• print(‘’Bonjour $name’’);
• printf(‘’Bonjour %s’’, $name);
[Link] Programmation Web II 20/154
Les Fonctions(1)
•strtoupper(variable) :convertir la chaîne en
majuscule
•strtolower(variable): : convertir la chaîne en
minuscule
•ucfirst(variable): : convertit le premier
caractère de la chaîne en majuscules.
[Link] Programmation Web II 21/154
Les Fonctions (2)
• trim(variable): supprime les espaces de début de de
fin de la chaîne.
• strlen — Calcule la taille d'une chaîne
• strrev — Inverse une chaîne
• Is_string:Est utilisé pour déterminer si une variable est
une chaîne de caractére ou non.
• Date:Cette fonction permet de formater une date.
echo "Aujourd'hui c'est ". date("Y/m/d");
echo "Aujourd'hui c'est ". date("Y.m.d");
echo "Aujourd'hui c'est ". date("Y-m-d");
[Link] Programmation Web II 22/154
Les Fonctions (3)
• Is_numeric: Est utilisé pour vérifier si une variable est
numérique ou non.
• strlen — Calcule la taille d'une chaîne
• strrev — Inverse une chaîne
• Is_string:Est utilisé pour déterminer si une variable est
une chaîne de caractére ou non.
• Date:Cette fonction permet de formater une date.
echo "Aujourd'hui c'est ". date("Y/m/d");
echo "Aujourd'hui c'est ". date("Y.m.d");
echo "Aujourd'hui c'est ". date("Y-m-d");
[Link] Programmation Web II 23/154
Les Fonctions (3)
• Isset(): est une fonction intégrée en PHP qui
vérifie si une variable est définie, ce qui
signifie qu’elle doit être déclarée et non NULL.
La variable
'str' est
définie.
[Link] Programmation Web II 24/154
Les Fonctions (4)
• empty() vérifie si une variable est vide ou non.
Cette fonction renvoie « FALSE » si la variable
existe et n’est pas vide, sinon elle renvoie
« TRUE »..
La variable
'str' est
vide.
[Link] Programmation Web II 25/154
Les Fonctions (5)
• Include() ou require :prend tout le code qui
existe dans le fichier spécifié et le copie dans
le fichier qui utilise l'instruction include
• Header(“location:Nom de la page”): permet
une rédirection d’une page en une autre
• Redirection après x temps
Header(‘Refresh:10;url=Nom de la page’)
Le PHP a beaucoup de fonctions natives , vous les exploiterez au fur et à mesure
[Link] Programmation Web II 26/154
Eléments de syntaxe PHP
• La syntaxe de PHP est celle de la 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
[Link] Programmation Web II 27
VARIABLES ET TYPES
[Link] Programmation Web II 28
Les variables et les types de données
• Tout identificateur commence par « $ »
• Les affectations sont réalisées grâce à « = »
• Les types sont :
– 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
• Les variables ne sont pas explicitement déclarées
[Link] Programmation Web II 29
Les variables et les types de données
• La « déclaration » d’une variable correspond à sa
première affectation
• Le type d’une variable est dynamique et est
déterminé par la valeur qui lui est affectée
• Une variable possède donc :
– Un nom (commençant par $)
– Un type dynamique
– Une valeur
• Adaptation possible du type selon le contexte
sans modification du type intrinsèque
[Link] Programmation Web II 30
Typage à l’affectation. Exemple
// Pas de déclaration préalable de variable
$test = 1.5 ;
$test
integer
float
array
$test = 12 ; 1.5
12
$test = array() ;
$test = "10" ;
[Link] Programmation Web II 31
Typage en fonction du contexte.
Exemple
$nombre1 = 1.5 ;
$nombre2 = 12 ;
$chaine1 = "10" ;
$chaine2 = 'coucou' ;
Utilisé
Utilisé comme
comme float
float
$total =
$nombre1 + $nombre2 + $chaine1 + $chaine2 ;
1.5
1.5 12
12 "10"
"10" 'coucou'
'coucou'
13.5
13.5 10.0
10.0
23.5
23.5 0.0
0.0
echo $total ; // 23.5 Réel
23.5
23.5
[Link] Programmation Web II 32
Modification de types
• Le type désiré peut être précisé : cast
• $variable = (nom_du_type) valeur
$a = (integer) "10" ;
$b = (string) 12 ;
$c = (float) $b ;
[Link] Programmation Web II 33
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
[Link] Programmation Web II 34
CHAÎNES DE CARACTÈRES
[Link] Programmation Web II 35
Substitution de variables dans les
chaînes
• Guillemets doubles chaîne
chaîne
$a="chaîne" ; voici
voici une
une chaîne
chaîne
$b="voici une $a";
chaîne
chaîne
• Guillemets simples voici
voici une
une $a
$a
$a='chaîne' ;
$b='voici une $a';
[Link] Programmation Web II 36
La commande echo
• Naïvement, 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 exactement, permet d’envoyer des octets au
navigateur du client
– Contenu HTML, XML, CSS, JavaScript, …
– Données d'une image
– Contenu d'un ficher PDF, Flash, etc.
[Link] Programmation Web II 37
Hello world !
Interprétation
Interprétation du
du code
code PHP
PHP sur
sur le
le serveur
serveur et
et
transmission
transmission du
du résultat
résultat au
au client
client
Serveur Navigateur
<?php
<?php <<html
html>>
$debut
$debut == <<<HTML <<head
<<<HTML head>>
<html>
<html> <<title
title>>hello
hello</
</title
title>>
<head>
<head> </
</head
head>>
<title>hello</title>
<title>hello</title> <<body
body>>
</head>
</head> Hello
Hello world!
world!
<body>\n </
</body
body>>
<body>\n
HTML; </
</html
html>>
HTML;
$corps
$corps == "Hello
"Hello world!\n";
world!\n";
$fin
$fin == <<<HTML
<<<HTML
</body>
</body>
</html>
</html>
HTML;
HTML;
/*
/* Envoi
Envoi au
au client
client */
*/
echo
echo $debut.$corps.$fin
$debut.$corps.$fin ;;
Impossible
Impossible de
de voir
voir le
le code
code PHP
PHP depuis
depuis le
le navigateur
navigateur !!
!!
[Link] Programmation Web II 38
Inclusions
• On peut inclure dans un script php le contenu
d’un autre fichier.
• require insert dans le code le contenu du fichier
spécifié même si ce n’est pas du code php. Est
équivalent au préprocesseur #include du C.
• Exemple :
• require(‘’[Link]’’);
• include évalue et insert à chaque appel (même
dans une boucle) le contenu du fichier passé en
argument.
• Exemple :
• include(‘’[Link]’’);
[Link] Programmation Web II 39/154
GESTION DES ERREURS
Tout code peut rencontrer une situation
anormale qui va l’empêcher de s’exécuter
correctement.
Ces « situations anormales » peuvent parfois
provenir du code lui-même, c’est-à-dire d’erreurs
faites par les développeurs qui l’ont écrit comme
par exemple l’utilisation d’une variable non
définie ou le passage d’arguments incorrects
dans une fonction ou encore l’oubli d’une
parenthèse ou d’un point-virgule quelque part
dans le code
[Link] Programmation Web II 40
GESTION DES ERREURS
Parfois, également, un code ne va pas pouvoir
s’exécuter correctement à cause d’un problème
externe comme par exemple dans le cas où on
souhaite inclure un fichier dans un script mais
que le fichier en question ne peut pas être inclus
pour le moment pour diverses raisons.
Dans ces cas-là, le PHP va signaler les problèmes
rencontrés lors de l’exécution du code en
renvoyant ce qu’on appelle une erreur.
[Link] Programmation Web II 41
GESTION DES ERREURS
A chaque fois que HP génère une erreur, il inclut
également un type qui prend la forme d’une
constante. Selon le problème rencontré, le
niveau ou « type » d’erreur renvoyé sera
différent et selon le type d’erreur le script pourra
continuer à s’exécuter normalement ou au
contraire sera stoppé brutalement.
[Link] Programmation Web II 42
GESTION DES ERREURS
PHP possède toute une structure permettant de
gérer les erreurs, qui peuvent être de différents
types :
Erreur de syntaxe lors de la compilation du
programme
Erreur d’exécution lors de l’exécution du
programme
[Link] Programmation Web II 43
GESTION DES ERREURS
Erreur de données : donnée innatendue,
incompatible avec les routines développées
pour son traitement (lettre dans un nombre
représentant une quantité, …)
[Link] Programmation Web II 44
GESTION DES ERREURS
Normalement, quand un script PHP rencontre
une erreur : un message s’affiche indiquant (en
anglais bien sur) le degré de gravité de l’erreur, la
cause de l'erreur, le nom du fichier de script la
ligne du script où l’erreur s’est produite.
selon la gravité de l’erreur, l'exécution du script
se termine à l’endroit de l’erreur, ou simplement
une ligne du script ne s’exécute pas, ou toutes
les lignes peuvent néanmoins s’exécuter
[Link] Programmation Web II 45
TYPES D’ERREURS
Notices: Erreurs non critiques, par défaut non
affichées. Toutes les instructions ont néanmoins pu
être exécutées
Warnings: Une instruction n'a pu être
correctement éxécutée (ex:fichier manquant...),
neanmoins le script peut continuer son exécution.
Fatal errors: Erreurs fatales : le script s'arrète :
erreur de syntaxe...
[Link] Programmation Web II 46
1. NOTICE Cette erreur est générée
par 2 éléments:
La variable n’est pas
déclarée
La variable est mal écrite
($nom,$Non)
Cette erreur n’empeche pas
le programme de continuer à
s’executer
[Link] Programmation Web II 47
[Link] Le fichier [Link]
n’existe pas et il y a
génération de cette erreur
Cette erreur n’empeche
pas le programme de
continuer à s’executer
[Link] Programmation Web II 48
3. FATAL ERRORS
Regardez bien ,juste à la fin de
l’instruction
echo “un cours facile” nous
avons oublié un point virgule
Cette erreur empêche le
programme de continuer à
s’executer
.
Très souvent cette erreur est causée par un élément
syntaxicale qui n’est pas fermé ,on peut dire : { [ “
‘( et bien d’autres
[Link] Programmation Web II 49
Fonction error_reporting()
• La fonction error_reporting nous permet de préciser
quelle erreur il faut afficher par exemple si les
erreurs qui n’empechent pas le programme de
s’exécuter si le logiciel est déjà réquisitionné par le
client , il faut pas le faire peur par des erreurs :
• La fonction error_reporting définit 7 niveaux
d’erreurs
[Link] Programmation Web II 50
Fonction error_reporting()
[Link] Programmation Web II 51
Exemple d’utilisation avec error_reporting()
Le (O) indique qu’aucune erreur ne s’affiche
pas
Nous avons affi
ché une
Variable sans la
créer
mais aucune er
reur
n’est generee e
t le
programme con
tinue à
s’executer
[Link] Programmation Web II 52
Exemple d’utilisation avec error_reporting()
Le (2) indique que seules les erreurs Warning
s’affichent alors que le code contient erreur de
Notice
[Link] Programmation Web II 53
Utilisation de la fonction set_error_handler()
Cette fonction est tres puissante ,vous allez
prendre le temps d’apprendre à l’utiliser
[Link] Programmation Web II 54
OPÉRATEURS
[Link] Programmation Web II 55
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"
[Link] Programmation Web II 56
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)
[Link] Programmation Web II 57
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
[Link] Programmation Web II 58
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)
[Link] Programmation Web II 59
Comparaison large / stricte
$a = 12 ; $b = "12" ; $c = 13.0 ;
boolean
boolean true
true
var_dump($a == $b) ;
boolean
boolean false
false
var_dump($a == $c) ;
var_dump($c == $b) ; boolean
boolean false
false
var_dump($a != $b) ; boolean
boolean false
false
var_dump($a != $c) ; boolean
boolean true
true
var_dump($c != $b) ; boolean
boolean true
true
var_dump($a === $b) ; boolean false
boolean false
var_dump($a === $c) ;
boolean
boolean false
false
var_dump($c === $b) ;
var_dump($a !== $b) ;
boolean
boolean false
false
var_dump($a !== $c) ; boolean
boolean true
true
var_dump($c !== $b) ; boolean
boolean true
true
boolean
boolean true
true
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
[Link] Programmation Web II 61
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
[Link] Programmation Web II 62
STRUCTURES DE CONTRÔLE
[Link] Programmation Web II 63
Structure de contrôle Si…Alors…
Sinon…
if (condition)
{
/* Bloc d’instructions exécuté si la
condition est vraie */
Optionnel
Optionnel
}
else
{
/* Bloc d’instructions exécuté si la
condition est fausse */
}
[Link] Programmation Web II 64
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) ;
[Link] Programmation Web II 65
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 ;
}
[Link] Programmation Web II 66
Structure de contrôle selon…
switch (val)
{
case v1:
instructions exécutées si val==v1
case v2:
case v3:
instructions exécutées si val==v2
ou si val==v3
ou si val==v1
…
default:
instructions dans tous les cas
}
• Fonctionne exactement comme une série de if/else avec
comparaison large
• val, v1, v2, … peut être de type integer, float, string,
NULL
[Link] Programmation Web II 67
L’instruction break
Permet de sortir d’une structure de contrôle
switch (val)
{
case v1:
instructions exécutées si val==v1
break ; /* Sortie du switch si val==v1 */
case v2:
case v3:
instructions exécutées si val==v2
ou si val==v3
ou si val==v1
break ; /* Sortie du switch si val==v2 ou val==v3*/
…
default:
instructions exécutées dans tous les cas
si val!=v1 et val!=v2 et val!=v3
}
Cas rendus exclusifs si break présent pour chaque case
[Link] Programmation Web II 68
TABLEAUX
[Link] Programmation Web II 69
Principes généraux
• Un tableau PHP est en réalité une carte
ordonnée
• Une carte associe des valeurs à des clés
• Un tableau PHP peut être vu comme :
– Une série de valeurs (peu importe leur type)
– Chaque valeur est étiquetée, repérée par une clé
(entier
Clé ou chaîne)
0 1 2 3
Valeur 12 15.2 "42" NULL
– Ils sont dits associatifs
Clé "début" 12 "a" "valeur"
Valeur false 3 16 "bonjour"
[Link] Programmation Web II 70
Tableaux « classiques » : indexés
• Création / initialisation:
$tab1=array(12, "fraise", 2.5) ;
$tab2[] = 12 ;
$tab2[] = "fraise" ;
$tab2[] = 2.5 ;
$tab3[0] = 12 ;
$tab3[1] = "fraise" ;
$tab3[2] = 2.5 ;
[Link] Programmation Web II 71
Tableaux associatifs : syntaxe
$tab5[ 'un'
un ] = 12 ;
$tab5['trois'
trois ] = "fraise"
fraise ;
$tab5["deux"
deux ] = 2.5 ;
$tab5[ 42 ] = "el5"
el5 ;
$tab6 = array( 'un'
un => 12,
12
'trois'
trois => "fraise",
fraise
"deux"
deux => 2.5,
2.5
42 => "el5"
el5 ) ;
[Link] Programmation Web II 72
Structure de contrôle « Pour
chaque… »
Des tableaux associatifs ne peuvent être parcourus grâce
aux indices des cases contenant les éléments…
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 */
}
[Link] Programmation Web II 73
Parcours de tableau : foreach
PHP … HTML
… <p>Val:12\n
$tab4[0] = 12 ; <p>Val:fraise\n
$tab4[1] = "fraise" ; <p>Val:2.5\n
<p>Val:el5\n
$tab4[2] = 2.5 ;
…
$tab4[5] = "el5" ;
foreach($tab4 as $v)
{ Navigateur
echo "<p>Val: $v\n";
}
…
[Link] Programmation Web II 74
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"
bonjour ;
$tab["la valeur"] = 3.0 ;
• Création
$tab = array(cle1 => val1,
cle2 => val2,
… );
[Link] Programmation Web II 75
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 */
}
[Link] Programmation Web II 76
Parcours de tableau
<?php
<?php
$html
$html == <<<HTML
<<<HTML
<html>
<html>
<head><title>foreach
<head><title>foreach clé</title>
clé</title>
</head>
</head>
<body>
<body>
HTML;
HTML;
$tab6
$tab6 == array('un'
array('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 .=
.= "<p>tab[$cle]:
"<p>tab[$cle]: $val\n"
$val\n" ;;
}}
echo
echo $html
$html .. "</body>\n</html>"
"</body>\n</html>" ;;
[Link] Programmation Web II 77
Fonctions défnies par
l’utisateur
78
Pourquoi les fonctions ?
• Modularité
Diviser le problème à résoudre en petits Pbs et résoudre
chacun d’eux par un module (facile à composer), appelé
fonction pour la plupart des langages
• Réutilisabilité
Possibilité de réutiliser certaines fonctions dans un autre
problème
• MAJ facile
La mise à jour d’une fonction n’affecte pas les autres
fonctions
Ecole ESIAM 79
Fonctions
• Déclaration
function nom_fonction($param1,$param2,…)
{
Corps de la fonction
}
$Param1, $param2, … sont dits paramètres formels de la
fonction
• Appel de la fonction
nom_fonction($eff1,$eff2,…)
$eff1,$eff2,… sont dits paramètres effectifs
80
Fonctions
• Fonction qui retourne une valeur
– L’instruction return dans le corps de la fonction permet de
retourner une valeur et de quitter la fonction.
function nom_fonction($param1,$param2,…)
{
Corps de la fonction
return($resultat);
}
$Param1, $param2, … sont dits paramètres formels de la fonction
• Appel de la fonction
$r = nom_fonction($eff1,$eff2,…);
Ecole ESIAM 81
Fonctions
• Exemple : [Link]
• fonction factorielle
<?php
function fact($a)
{
$f=1;
for($i=1;$i<=$a;$i++)
$f=$f*$i;
return($f);
}
$b=5;
$c=fact($b);
print($c);
?>
82
Fonctions
• Utilisation des fonctions
– Une fonction définie dans un script peut être
utilisée dans les autres scripts du même fichier.
– Exemple : [Link]
83
Fonctions
• Modes de passage des paramètres
– Par valeur
– Par référence
– Par référence ponctuelle
84
Fonctions
• Passage Par valeur
– Mode par défaut
– Les paramètres effectifs gardent leur valeurs
après l’appel de la fonction, même si cette
dernière les modifie à l’intérieur de son corps.
=> la fonction travaille sur une copie des
paramètres
85
Fonctions
Exemple : fonction_pass_val.php
<?php
function doubler($a)
{
$a=$a*2;
print("valeur du paramètre dans la fonction:$a<br>");
}
$b=5;
print("valeur du paramètre avant l'appel:$b<br>");
doubler($b);
print("valeur du paramètre après l'appel:$b<br>");
?>
86
Fonctions
• Passage par référence
– Le changement d’un paramètre effectif sera
perceptible de l’extérieur.
=> la fonction travaille sur le paramètre et non sur sa copie
– Notation : précéder le paramètre formel par &
function nom_fonction(&$param1,&$param2,…)
87
Fonctions
• Exemple :fonction_passage_ref.php
<?php
function doubler(&$a)
{
$a=$a*2;
print("valeur du paramètre dans la fonction:$a<br>");
}
$b=5;
print("valeur du paramètre avant l'appel:$b<br>");
doubler($b);
print("valeur du paramètre après l'appel:$b<br>");
?>
88
Fonctions
• Passage par référence ponctuel
– Lors de la définition de la fonction les
paramètres sont passés par valeur
– Lors de l’appel de la fonction les paramètres
effectifs sont précédés par &
– Attention : Risque d’incohérence
89
Fonctions
• Exemple : fonction_passage_ponc.php
• fonction factorielle
<?php
function doubler($a)
{
$a=$a*2;
print("valeur du paramètre dans la fonction:$a<br>");
}
$b=5;
print("valeur du paramètre avant l'appel:$b<br>");
doubler(&$b);
print("valeur du paramètre après l'appel:$b<br>");
?>
90
Fonctions
• Paramètres par défaut
– Attribuer une valeur par défaut à un (des) paramètre(s)
omis lors de l’appel d’une fonction
– Notation : affecter la valeur par défaut au paramètre
formel
• function nom_fonction($param1,$param2 = val )
• Le 2ème paramètre a une valeur par défaut
• Appel de la fonction
nom_fonction($eff);
nom_fonction($eff1,$eff2);
91
Fonctions
• Paramètres par défaut
– Exemple : fonction_par_def1.php
<?php
function conversion($init=0,$fin=180,$pas=20)
{
for($i=$init;$i<=$fin;$i+=$pas)
{
$grade = $i*200/180;
print("$i : $grade <br>");
}
}
conversion();
conversion(10);
conversion(20,90,10);
?>
92
Fonctions
• Paramètres par défaut : Attention !
– Seuls les derniers paramètres peuvent avoir des
valeurs par défaut
– Exemple : fonc_par_def2.php
• function f_ambigue($p1=0, $p2, $p3=5)
Erreur lors de l’interprétation
• Ambiguité lors de l’appel de la fonction
Comment interpréter f_ambigue(1,5) ?
f_ambigue(0,1,5) ou f_ambigue(1,5,5)
93
Fonctions
• Nombre de paramètres indéfini
– Dans ce cas les paramètres sont extraits par deux
fonctions :
• func_num_arg() : retourne le nombre de paramètres passés à
la fonction
• func_get_arg ($i) : retourne le paramètre d’indice $i dans la
liste des paramètres
Le premier paramètre a l’indice 0
94
Fonctions
• Nombre de paramètres indéfini
– Exemple : fonction_par_indef.php
– afficher les paramètres reçus par une fonction
<?php
function sansparam()
{
$nb_par = func_num_args();
for($i=0;$i<$nb_par;$i++)
{
$param = func_get_arg($i);
print("param $i : $param <br>");
}
}
sansparam("bonjour","mon","ami");
?>
95
Fonctions
• Fonctions récursives
– Dans le corps d’une fonction on peut trouver un appel à elle-
même
– Exemple : fonction_recursive.php
– factorielle
<?php
function fact($a)
{
if ($a==1) return(1);
else return($a*fact($a-1));
}
$b=5;
$c=fact($b);
print("$b ! = $c");
?>
96
Fonctions
• Variables globales
– Les paramètres locales à une fonction ne sont pas visibles de
l’extérieur
– Une variable globale peut être accédée ou modifiée à partir de
n’importe quelle fonction du même fichier
– Pour utiliser une variable globale (déclarée à l’extérieur de la
fonction) nous devons la déclarer par la ligne suivante :
global $nom_var;
– Exemple : fonction_var_global.php
97
DONNÉES DE FORMULAIRES
[Link] Programmation Web II 98
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).
$_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.
[Link] Programmation Web II 99
Traitement des données de
formulaires Client
Client
Réseau
Réseau Navigateur
nomPers=robert•HTML
nomPers=robert•JavaScript
•CSS
<<html
html>>
<<head
head>>
Serveur
Serveur nomPers
<<title
title>>bonjour
bonjour</
</title
title>> nomPers
</
</head
head>>
Serveur
<<bodyWeb <?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 "".$ robert
robert
.$_GET
_GET[[''nomPers
nomPers'']].."" !!\n
\n"" ;;
echo
echo $$html
html .. ""</
</body
body>>\n
\n</
</html
html>>"" ;;
[Link] Programmation Web II 100
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==""[Link]
[Link]"" 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>>
[Link] Programmation Web II 101
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>> $$_GET
_GET[[''nomPers
nomPers'']]
<<title
title>>bonjour
bonjour</
</title
title>>
</
</head
head>>
est-il
est-il défini
défini ??
<<body
body>> HTML
HTML;;
if
if ((isset
isset(($$_GET
_GET[[''nomPers
nomPers'']])))) $$_GET [[''nomPers '']]
{{ _GET nomPers
if (! empty ($ _GET ['nomPers ']))
est-il
est-il vide
vide ??
if (!empty($_GET['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>>"" ;;
[Link] Programmation Web II 102
Formulaires contenant des champs
« SELECT »
[Link] Programmation Web II 103
Formulaires contenant des champs
<!DOCTYPE
« SELECT unique»
<!DOCTYPE html
html PUBLIC
PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML
HTML 4.01
4.01 Transitional//EN">
Transitional//EN">
<html>
<html>
<head>
<head>
<title>Formulaire
<title>Formulaire dede saisie
saisie des
des fruits</title>
fruits</title>
</head>
</head>
<body>
<body>
<form
<form action="[Link]"
action="[Link]" method="get">
method="get">
Choisissez
Choisissez des
des fruits:
fruits:
<select
<select name="sel">
name="sel">
<option>Fraise
<option>Fraise
<option>Pomme
<option>Pomme
Envoyer
Envoyer <option>Poire
<option>Poire
<option>Banane
<option>Banane
<option>Cerise
<option>Cerise
</select>
</select>
<input
<input type="submit"
type="submit" value="envoyer">
value="envoyer">
</form>
</form>
</body>
</body> [Link]?
[Link]?sel=Pomme
sel=Pomme
</html>
</html>
[Link] Programmation Web II 104
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="[Link]" method="get">
Choisissez des fruits:
<select name="sel" multiple>
<option>Fraise
<option>Pomme
<option>Poire
Envoyer
Envoyer <option>Banane
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
</body> [Link]?
[Link]?sel=Pomme&sel=Poire
sel=Pomme&sel=Poire ???
???
</html>
[Link] Programmation Web II 105
Formulaires contenant des champs
<html>
« SELECT multiple»
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="[Link]" method="get">
Choisissez des fruits:
<select name="sel[]" multiple>
<option>Fraise
<option>Pomme
<option>Poire
<option>Banane
Envoyer
Envoyer <option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
</body>
</html> [Link]?
[Link]?sel%5B%5D=Pomme&sel%5B%5D=Poire
sel%5B%5D=Pomme&sel%5B%5D=Poire
[Link]?
[Link]?sel[]=Pomme&sel[]=Poire
sel[]=Pomme&sel[]=Poire
[Link] Programmation Web II 106
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>Liste
<title>Liste dede fruits</title>
fruits</title>
</head> $$_GET
_GET [[‘‘sel
sel '']]
</head>
<body>
<body> est
estun
untableau
tableau
HTML;
HTML;
if
if (isset($_GET['sel'])
(isset($_GET['sel']) && && !empty($_GET['sel']))
!empty($_GET['sel']))
{/*
{/* La variable $_GET['sel'] est
La variable $_GET['sel'] est définie
définie
et
et elle
elle n'est
n'est pas
pas vide
vide */
*/
foreach($_GET['sel']
foreach($_GET['sel'] as as $fruit)
$fruit)
$html
$html .=
.= "<p>Vous
"<p>Vous avez
avez choisi
choisi $fruit\n"
$fruit\n" ;;
}}
else
else
$html
$html .=
.= "<p>Vous
"<p>Vous n'avez
n'avez pas
pas choisi
choisi de
de fruit\n"
fruit\n" ;;
echo
echo $html
$html .. "</body>\n</html>"
"</body>\n</html>" ;;
[Link] Programmation Web II 107
Résultat
[Link] Programmation Web II 108
Formulaires contenant des champs
« CHECKBOX »
[Link] Programmation Web II 109
Formulaires contenant des champs
<!DOCTYPE
« CHECKBOX »
<!DOCTYPE html
html PUBLIC
PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML
HTML 4.01
4.01 Transitional//EN">
Transitional//EN">
<html>
<html>
<head>
<head>
<title>Formulaire
<title>Formulaire de de saisie
saisie des
des fruits</title>
fruits</title>
</head>
</head>
<body>
<body>
<form name=""formu
<form name= formu"" action=
action=""[Link]
[Link]"" method=
method=""get
get"">>
<p>Choisissez
<p>Choisissez desdes fruits :
fruits :
<p><input type=""checkbox
<p><input type= checkbox"" name=
name=""sel[]
sel[]"" value=
value=""Fraise
Fraise"">Fraise
>Fraise
<p><input type=""checkbox
<p><input type= checkbox"" name=
name=""sel[]
sel[]"" value=
value=""Pomme
Pomme"" >Pomme
>Pomme
<p><input type= "checkbox " name= " sel[] " value= " Poire
<p><input type="checkbox" name="sel[]" value="Poire" >Poire " >Poire
<p><input type=""checkbox
<p><input type= checkbox"" name=
name=""sel[]
sel[]"" value=
value=""Banane
Banane"">Banane
>Banane
<p><input type=""checkbox
<p><input type= checkbox"" name=
name=""sel[]
sel[]"" value=
value=""Cerise
Cerise"">Cerise
>Cerise
<p><input type=""submit
<p><input type= submit"" value=
value=""Envoyer
Envoyer"">>
</form>
</form>
</body>
</body>
</html>
</html>
[Link] Programmation Web II 110
Résultat
[Link] Programmation Web II 111
Les sessions(1)
Principe
Les sessions permettent de conserver des informations relatives à un
utilisateur lors de son parcours sur un site web
Des données spécifiques à un visiteur pourront être transmises de
page en page afin d'adapter personnellement les réponses d'une
application PHP
Chaque visiteur en se connectant à un site reçoit un numéro
d'identification dénommé identifiant de session (SID)
La fonction session_start() se charge de générer automatiquement cet
identifiant unique de session et de créer un répertoire. Elle doit être
placée au début de chaque page afin de démarrer ou de continuer
une session.
<?php
session_start();
$Session_ID = session_id();
// $Session_ID = 7edf48ca359ee24dbc5b3f6ed2557e90 ?>
[Link] Programmation Web II 112
Les sessions(2)
Principe
Un répertoire est créé sur le serveur à l'emplacement désigné
par le fichier de configuration [Link], afin de recueillir les
données de la nouvelle session.
[Session]
session.save_path= C:\PHP\sessiondata
; Rép session = \sess_7edf48ca359ee24dbc5b3f6ed2557e90
Le fichier [Link] peut également préciser un nom de session
par l'option [Link] ou sa durée de vie par
session.gc_maxlifetime
La session en cours peut être détruite par la fonction
session_destroy(). Cette commande supprime toutes les
informations relatives à l'utilisateur.
session_destroy();
[Link] Programmation Web II 113
Les sessions(3)
Le traitement des variables de session
Les variables de session sont chargées dans une session par
l'intermédiaire de la fonction session_register()
<?php
session_start();
session_register("nom_variable");
...
session_register("nom_variableN");
?>
Une fois la variable enregistrée, elle est
accessible à travers le tableau associatif
[Link] $_SESSION["nom_variable"]
Programmation Web II 114
Les sessions(4)
Le traitement des variables de session
Le transport des informations entre les documents est réalisé par l'entremise
soit d'un cookie
soit d'une requête HTTP
Cette dernière solution est la plus fiable puisque les cookies peuvent ne pas être
acceptés par le client ou celui-ci pourrait les détruire en cours de session.
Il suffit de concaténer l'identifiant de session à l'adresse URL de la page cible
pour que cette dernière puisse accéder aux informations conservées par la
session.
echo '<a href=” [Link] ’. session_name(). ’=‘ . session_id().‘>
lien</a>‘
[Link] Programmation Web II 115
Les sessions(5)
Le traitement des variables de session
Par défaut, PHP tente de passer par les cookies pour
sauvegarder l'identifiant de session dans le cas où le client les
accepterait. Il est possible d’éviter cela, il suffit de désactiver
l'option de configuration session.use_cookies dans le fichier
[Link].
[Session]
session.use_cookies 0; //désactive la gestion des sessions par cookie
[Link] Programmation Web II 116
Les sessions(6)
Exemple
<!-- Fichier : [Link] -->
<html><body>
<form method="post" action="[Link]">
<table border="0">
<tr>
<td><u>Nom :</u></td>
<td><input type="text" name="Nom" size="20" value="RIVES"></td></tr>
<tr>
<td><u>Prénom :</u></td>
<td><input type="text" name="Prenom" size="20" value="Jean-Pierre"></td></tr>
<tr>
<td><u>eMail :</u></td>
<td><input type="text" name="cEmail" size="20" value=”du@[Link]"></td></tr>
<tr><td> </td>
<td><input type="submit" name="soumettre" value="Envoyer"></td></tr></table>
</form>
</body
</html>
[Link] Programmation Web II 117
Les sessions(7)
<?
session_start();
$nom = $_POST["Nom"];
$prenom = $_POST["Prenom"];
$email = $_POST["cEmail"];
session_register("nom");
session_register("prenom");
session_register("email");
$_SESSION["nom"]=$nom;
$_SESSION["prenom"]=$prenom;
$_SESSION["email"]=$email;
header("Location: [Link]?" . session_name() . "=" . session_id());
?>
[Link] Programmation Web II 118
Les sessions(8)
<?
session_start();
?>
<html><body><?
echo("<u>Identifiant de session :</u> <b>"
. session_id() . "</b><br>");
echo("<u>Nom de la session :</u> <b>"
. session_name() . "</b><br><br>");
echo("<u>Nom :</u> <b>". $_SESSION["nom"] . "</b><br>");
echo("<u>Prénom :</u> <b>" . $_SESSION["prenom"] . "</b><br>");
echo("<u>eMail :</u> <b>" . $_SESSION["email"] . "</b><br>");
//session_destroy();
?>
</body>
</html>
[Link] Programmation Web II 119
Les sessions (9)
Les fonctions de sessions
session_start() -- Initialise les données de session
session_id() -- Affecte et/ou retourne l'identifiant de session courante
session_name() -- Affecte et/ou retourne le nom de la session courante
session_register() -- Enregistre une variable dans la session courante
session_destroy() -- Détruit toutes les données enregistrées d'une session
session_is_registered() -- Indique si une variable a été enregistrée dans la session ou pas
session_unregister() -- Supprime une variable dans la session courante
session_unset() -- Détruit toutes les variables de session
session_cache_expire() -- Retourne la date d'expiration du cache de la session
session_save_path() -- Affecte et/ou retourne le chemin de sauvegarde de la session courante
session_decode() -- Décode les données de session à partir d'une chaîne
session_encode() -- Encode les données de session dans une chaîne
[Link] Programmation Web II 120
Les sessions (10)
Quelles sont les erreurs possibles ?
Répertoire de session inaccessible
Warning: open(/tmp\sess_3c80883ca4e755aa72803b05bce40c12, O_RDWR)
failed: m (2) in c:\phpdev\www\bp\[Link] on line 2
Le répertoire de sauvegarde est défini dans le [Link] : session.save_path = /tmp
Il faut donc
Créer un répertoire
Lui donner les droits d'écriture pour tous
En spécifier le chemin dans le [Link]
PHP n'est pas autorisé à utiliser les sessions
Il faut s'assurer que le PHP est bien autorisé a créer des sessions. C'est juste un paramètre
à activer. Faire un phpinfo() pour voir ces paramètres. La commande phpinfo() se contente
d'afficher dans le navigateur le contenu du fichier de configuration [Link] .
[Link] Programmation Web II 121
Les sessions (11)
Quelles sont les erreurs possibles ?
Avoir déjà écrit dans la page
Warning: Cannot send session cookie - headers already sent by (output started at
/home/SiteWeb/SiteAnalyse/[Link]) in /home/SiteWeb/SiteAnalyse/[Link] on
line 6
Cette erreur survient lorsqu'on tente d'ouvrir une session après avoir déjà écrit dans le
document, ce qui interdit.
Ce qu'il ne faut pas faire :
<html>
<body>
<?php session_start();
...
ceci non plus :
<?php echo "<html>";
...
session_start();
[Link] Programmation Web II 122
Références
$a = 12 ; $$aa 84
12
12
84
$b = $a ;
$c = &$a ; $$bb ""coucou
12coucou""
$b = "coucou" ; $$cc ""hello
hello""
$c = 84 ;
echo "\$a : $a\n" ;
$a
$a :: 84
echo 84
"\$b : $b\n" ;
$b
$b :: coucou
echo coucou
"\$c : $c\n" ;
unset($c)
$c
$c :: 84
84 ;
$c = "hello" ;
[Link] Programmation Web II 123
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
[Link] Programmation Web II 124
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 non
HTML non
die($html."problème val") ;
valide…
valide …
/* Au delà de ce point, Navigateur
fin du script */
} problème val
$html .= <<<HTML
Choix: $val
</body>
</html>
[Link] Programmation Web II 125
Gestion de l'affichage des erreurs
• int error_reporting ( Constante
[int
Ancien
Ancien niveau
niveau d'erreur
d'erreur
level] ) E_ERROR
E_WARNING
E_PARSE
e
Débogag
Sur E_NOTICE
Sur un
un serveur
serveur en
en production,
production,
E_CORE_ERROR
toute
toute erreur
erreur affichée
affichée donne
donne E_CORE_WARNING
des
des indices
indices sur
sur les
les scripts
scripts et
et E_COMPILE_ERROR
rend
rend lele site
site vulnérable
vulnérable E_COMPILE_WARNING
E_USER_ERROR
E_USER_WARNING
[Link]
[Link] E_USER_NOTICE
E_ALL
display_errors
display_errors boolean
boolean E_STRICT
[Link] Programmation Web II 126
Opérateur de contrôle d'erreur en
phase de développement
Fichier
Fichier absent
absent
$v = file("[Link]")
or die("Problème
Warning
Warning:: file([Link]):
de
file([Link]): failed
failed to
to open
open
lecture")
stream:
stream: No ; file
No such
such file or
or directory
directory in
in
[Link]
[Link] on
on line
line 68
68
Problème
Problème de
de lecture
lecture
$v = @file("[Link]")
or die("Problème de lecture") ;
Problème
Problème de
de lecture
lecture
[Link] Programmation Web II 127
[Link] Programmation Web II 128
ALIMENTATION D’UNE BASEE DE DONNEE
VIA LES
INTERFACES
[Link] Programmation Web II 129
• En PHP, on peut difficilement se passer d'une
base de données. Cet outil incontournable
sert à enregistrer des données de façon
efficace et organisée.
• Tout ce que vous voulez enregistrer sur votre
site va se retrouver stocké dans une base de
données : liste des membres, messages des
forums, news, etc.
• Objectifs : Familiarisé l’étudiant à Insérer,
afficher, modifier, supprimer des données en
PHP
[Link] Programmation Web II 130
• Il y a deux manières de créer une base de
données en php:
1) On peut utiliser les interfaces graphiques dont les
scripts de création sont prédéfinis avant dans
l’application phpMyAdmin et c’est la manière dont
nous allons adopter pour être rapide.
2) On peut écrire des scripts ou commandes de
création dans la fenêtre de requette SQl
[Link] Programmation Web II 131
• Pour créer la base de données, nous
utiliserons le SGBD MYSQL.
• On peut installer MYSQL individuellement ou
on peut utiliser l’outil Wampserver ou Easyphp
.
• Dans ces outils ,MYSQL est intégré
• La base de données sera crée dans
phpmyadmin qui est intégré dans Easyphp et
Wampserver
[Link] Programmation Web II 132
Introduction à PHPMYADMIN
• MySQL dèrive directement de SQL (Structured Query
• Language)
• L’outil phpMyAdmin est développé en PHP et offre une interface
pour l’administration des base de données
• cet outil permet de :
• créer de nouvelles bases
• créer/modifier/supprimer des tables
• afficher/ajouter/modifier/supprimer des tuples dans des tables
• effectuer des sauvegardes de la structure et/ou des données
• effectuer des requêtes
• gérer les privilèges des utilisateurs
[Link] Programmation Web II 133
[Link] Programmation Web II 134
[Link] Programmation Web II 135
[Link] Programmation Web II 136
[Link] Programmation Web II 137
[Link] Programmation Web II 138
[Link] Programmation Web II 139
[Link] Programmation Web II 140
[Link] Programmation Web II 141
[Link] Programmation Web II 142
[Link] Programmation Web II 143
[Link] Programmation Web II 144
[Link] Programmation Web II 145
[Link] Programmation Web II 146
[Link] Programmation Web II 147
[Link] Programmation Web II 148
Gestion des clés étrangères avec
phpmyadmin
Nous allons vous montrer comment définir
des clés étrangères en utilisant l'interface
graphique de phpmyadmin.
Nous allons prendre un exemple d’une base de
données de gestion d’une bibliothèque qui
contient trois tables :
Livre(codeBarre,titre,auteur,genre,résumé),
Client(numClient,nom,prénom,adresse,téléph
one)
Emprunter(numLivre,numClient,date)
[Link] Programmation Web II 149
Gestion des clés étrangères avec
phpmyadmin(2)
Pour commencer, vous devez vérifier que toutes
les tables ont été stockées avec le moteur de
stockage InnoDB. Pour le vérifier, cliquez sur le
nom de votre base de données. Comme le
montre la figure ci-dessous, vous devez alors
visualiser un tableau récapitulant le nom des
tables enregistrées dans votre base de
données, ainsi que d'autres renseignements
comme le nombre d'enregistrements, le type,
l'interclassement ... Le type correspond au
moteur de stockage utilisé pour stocker la table
dans la base de données.
[Link] Programmation Web II 150
Gestion des clés étrangères avec
phpmyadmin(3)
[Link] Programmation Web II 151
Gestion des clés étrangères avec
phpmyadmin(4)
• Si le moteur de stockage n’est pas INNODB
comme la table test montrée dans la figure ci-
dessous ,vous changez la table concernée
[Link] Programmation Web II 152
Gestion des clés étrangères avec
phpmyadmin(5)
Vous devez alors cliquer sur la table que vous souhaitez
modifier (symbolisé par le 1 sur la figure ci-dessous)
puis cliquer sur l'onglet opérations (symbolisé par le 2
sur la figure ci-dessous).
[Link] Programmation Web II 153
Gestion des clés étrangères avec
phpmyadmin(6)
L'option permettant de modifier le type de stockage est
alors disponible comme le montre la figure suivante. Il
vous suffit de sélectionner InnoDB parmi les choix
proposés.
[Link] Programmation Web II 154
Gestion des clés étrangères avec
phpmyadmin(7)
Reprenons notre exemple de bibliothèque. Logiquement un livre
ne peut être emprunté que s'il existe dans la bibliothèque. De la
même façon, on ne peut insérer un nouvel emprunt dans la table
Emprunter que si la valeur donnée à l'attribut numLivre
référence un livre dans la table Livre. C'est pourquoi l'attribut
numLivre est une clé étrangère qui référence la clé primaire
codeBarre de la table Livre. Pour spécifier cette contrainte de
référence en utilisant phpmyadmin, commencez par cliquer sur
la table Emprunter (1) (ou sur la table où un attribut doit en
référencer un autre), puis cliquez sur "Gestion des relations" (2).
La figure suivante vous indique où cliquer :
[Link] Programmation Web II 155
Gestion des clés étrangères avec
phpmyadmin(8)
[Link] Programmation Web II 156
Gestion des clés étrangères avec
phpmyadmin(9)
• Il est alors possible d'ajouter des références
pour l'attribut numLivre (1) et de spécifier
comment cette contrainte s'applique sur la
suppression d'un enregistrement ou sur la
mise à jour d'un enregistrement(2).
[Link] Programmation Web II 157
Gestion des clés étrangères avec
phpmyadmin(10)
[Link] Programmation Web II 158
Gestion des clés étrangères avec
phpmyadmin(11)
Phpmyadmin vous propose d'ailleurs les
attributs pouvant être référencés (1). Sur notre
exemple, nous avons tous les attributs de
chaque table qui ont été déclaré comme
appartenant à la clé de la table et dont le type
est le même que celui de numLivre(c'est-à-dire
int). Il nous suffit donc de choisir l'attribut
codeBarre de la table Livre.
[Link] Programmation Web II 159
Gestion des clés étrangères avec
phpmyadmin(12)
[Link] Programmation Web II 160
Gestion des clés étrangères avec
phpmyadmin(13)
Comme vous pouvez le voir il est possible de référencer un
attribut de la même table : numLivre pourrait référencer
numClient. Dans notre exemple de bibliothèque cela n'a aucun
sens. Mais imaginez une table employé qui stocke l'ensemble
des employés d'une société et dont les attributs sont
(numEmployé, nom, prénom, chef). Le chef d'un employé étant
lui même un employé, il est alors pratique de pouvoir faire un
lien entre l'attribut chef et l'attribut numEmployé afin de
spécifier que le chef d'un employé est obligatoirement un
employé. Ceci permettra des mises à jour cohérentes.
[Link] Programmation Web II 161
Activez la fenetre d’authentification
de PHPMYADMIN(1)
Normalement, lors de l’ouverture de
phpmyadmin , il devrait s’oouvrir sur
une fenetre d’authentification pour la
securité des bases de données qu’il
héberge mais c’est pas toujours le cas .
[Link] Programmation Web II 162
Activez la fenetre d’authentification
de PHPMYADMIN(2)
Voici l’exemple de la fenetre d’ouverture si elle
est activée
[Link] Programmation Web II 163
Activez la fenetre d’authentification
de PHPMYADMIN(3)
Si elle n’est pas activée, voici comment l’activer
sous wampserver
Vous allez éditer le fichier [Link]
Se trouvant dans le répertoire ci-dessous
commenter la ligne ci- dessous
Ajouter la ligne ci-dessous
[Link] Programmation Web II 164
Interfaçage avec une base de
données(1)
Principe
PHP propose de nombreux outils permettant de travailler avec la
plupart des SGBDR
Oracle, Sybase, Microsoft SQL Server, PostgreSQL ou encore MySQL
Lorsqu'une base de données n'est pas directement supportée par
Php, il est possible d'utiliser un driver ODBC (pilote standard) pour
communiquer avec les bases de données
Php fournit un grand choix de fonctions permettant de manipuler les
bases de données.
Quatre fonctions sont essentielles:
– La fonction de connexion au serveur
– La fonction de choix de la base de données
– La fonction de requête
– La fonction de déconnexion
[Link] Programmation Web II 165
Interfaçage avec une base de
données(2)
Principe
Avec le SGBD MySQL, les fonctions de
manipulation sont :
mysql_connect
mysql_select_db
mysql_query
mysql_close
[Link] Programmation Web II 166
Se connecter à la base de données en PHP
• Pour pouvoir travailler avec la base de
données en PHP, il faut d'abord s'y connecter.
• Nous allons apprendre à lire des données dans
une BDD (base de données). Or, je vous
rappelle que PHP doit faire l'intermédiaire
entre vous et MySQL.
[Link] Programmation Web II 167
Comment se connecte-t-on à la base de données en PHP ?
• PHP propose plusieurs moyens de se connecter à une base de
données MySQL.
• L'extension mysql_ : ce sont des fonctions qui permettent
d'accéder à une base de données MySQL et donc de
communiquer avec MySQL. Leur nom commence toujours par
mysql_. Toutefois, ces fonctions sont vieilles et on recommande
de ne plus les utiliser aujourd'hui.
• L'extension mysqli_ : ce sont des fonctions améliorées d'accès à
MySQL. Elles proposent plus de fonctionnalités et sont plus à
jour.
• L'extension PDO : c'est un outil complet qui permet d'accéder à
n'importe quel type de base de données. On peut donc l'utiliser
pour se connecter aussi bien à MySQL que PostgreSQL ou
Oracle.
[Link] Programmation Web II 168
Quel moyen choisir parmi tous ceux-là ?
• PDO car c'est cette méthode d'accès aux bases de données la
plus utilisée. D'autre part, le gros avantage de PDO est que
vous pouvez l'utiliser de la même manière pour vous
connecter à n'importe quel autre type de base de données
(PostgreSQL, Oracle…)
[Link] Programmation Web II 169
Se connecter à MySQL avec PDO(1)
• Nous pouvons nous connecter à MySQL. Nous allons avoir
besoin de quatre renseignements :
• Le nom de l'hôte : c'est l'adresse de l'ordinateur où MySQL
est installé (comme une adresse IP). Le plus souvent, MySQL
est installé sur le même ordinateur que PHP : dans ce cas,
mettez la valeur localhost (cela signifie « sur le même
ordinateur »). Néanmoins, il est possible que votre hébergeur
web vous indique une autre valeur à renseigner (qui
ressemblerait à ceci : [Link]). Dans ce cas, il
faudra modifier cette valeur lorsque vous enverrez votre site
sur le Web ;
• La base : c'est le nom de la base de données à laquelle vous
voulez vous connecter. Dans notre cas, la base s'appelle test.
Nous l'avons créée avec phpMyAdmin dans le chapitre
précédent ;
[Link] Programmation Web II 170
Se connecter à MySQL avec PDO (2)
• Le login : il permet de vous identifier. Renseignez-vous auprès
de votre hébergeur pour le connaître. Le plus souvent (chez
un hébergeur gratuit), c'est le même login que vous utilisez
pour le FTP ;
• Le mot de passe : il y a des chances pour que le mot de passe
soit le même que celui que vous utilisez pour accéder au FTP.
Renseignez-vous auprès de votre hébergeur. ;
• $bdd = new PDO('mysql:host=localhost;dbname=NomBase;charset=utf8', 'root', '');
[Link] Programmation Web II 171
Insertion des données
• Prenons un exemple suivant
• Notre base de donnée est nommée formation et elle est composée par
une seule table nommée messagef avec 3 colonnes (idmessage,contenu
et DatePublication) dont voici sa structure
[Link] Programmation Web II 172
Insertion des données (2)
• Connexion à la base de
données
• $bdd = new
PDO('mysql:host=localhost;dbna
me=formation;charset=utf8',
'root', '');
[Link] Programmation Web II 173
Insertion des données(3)
• Formulaire d’insertion
[Link] Programmation Web II 174
Insertion des données(4)
• Formulaire d’insertion
[Link] Programmation Web II 175
Voici le formulaire généré par ce code
Notez bien la méthode utilisée par notre
formulaire, ici c'est une méthode POST ce qui
permet de ne pas afficher les variables dans URL,
comme le ferait la méthode GET. IL faut toujours
utiliser la méthode POST cela évite de laisser
certains trous de sécurité. Pour bien voir la
différence entre les deux méthodes, changez POST
en GET dans ce formulaire, et regardez bien votre
URL
Sur la même page, Je passe sur la méthode pour
récupérer les données provenant d'un formulaire.
[Link] Programmation Web II 176
Insertion des données (5)
Première Methode
if(isset($_POST['boutonValider']))
{
$RecupContenu=$_POST[‘Contenu'];
$RecupDate=$_POST[‘Datee'];
$InsertionMessage = "INSERT INTO messagef
(contenu,DatePublication)
VALUES($RecupContenu, $RecupDate)";
$bdd >exec($InsertionMessage );
}
[Link] Programmation Web II 177
Insertion des données (6)
Deuxieme Methode
Avec cette méthode on utilise des requetés préparés
requetés préparés: une requête e sécurisée et gagnée en performance
Elle est crée et exécuté en trois étapes:
une étape de préparation: créer un schéma de requête, en ne précisant
pas les valeurs réelles dans notre requête mais en utilisant plutôt des
marqueurs nommés (sous le forme :nom) ou des marqueurs interrogatifs
(sous la forme ?).
une étape de compilation: Une fois le schéma créé, la base de données va
analyser, compiler, faire des optimisations sur notre schéma de requête
SQL et va stocker le résultat sans l’exécuter.
une dernière étape d’exécution: Finalement, nous allons lier des valeurs à
nos marqueurs et la base de données va exécuter la requête
[Link] Programmation Web II 178
Insertion des données (7)
• Les méthodes execute()
Pour exécuter une requête préparée, nous allons cette fois-ci devoir utiliser la
méthode execute() et non plus exec() comme on utilisait depuis le début
de cette partie
En utilisant des marqueurs dans nos requêtes préparées, nous allons avoir
deux grandes options pour exécuter la méthode execute() :
On va pouvoir lui passer un tableau de valeurs de paramètres (uniquement en
entrée) donc execute(array)
Avec execute(array) et des marqueurs nommés
[Link] Programmation Web II 179
Insertion des données (8)
Première Cas
if(isset($_POST['boutonValider']))
{
$RecupContenu=$_POST[‘Contenu'];
$RecupDate=$_POST[‘Datee'];
$InsertionMessage = $bdd->prepare( "INSERT INTO messagef
(contenu,DatePublication)
VALUES(?, ?) ’’ );
$InsertionMessage ->execute(array($RecupContenu,
$RecupDate));
Echo “Insertion avec succes “;
}
[Link] Programmation Web II 180
Insertion des données (9)
Deuxième Cas
if(isset($_POST['boutonValider']))
{
$RecupContenu=$_POST[‘Contenu'];
$RecupDate=$_POST[‘Datee'];
$InsertionMessage = $bdd->prepare( "INSERT INTO messagef
(contenu,DatePublication)
VALUES(:contenu,:DatePublication ) ’’ );
$InsertionMessage ->execute(array(‘contenu ‘=>$RecupContenu,
‘DatePublication’=>$RecupDate));
Echo “Insertion avec succes “;
}
[Link] Programmation Web II 181
Insertion d’une image (10)
Configurer le fichier "[Link]"
Tout d'abord, assurez-vous que PHP est configuré pour
autoriser les téléchargements de fichiers.
Dans votre fichier "[Link]", recherchez la
file_uploadsdirective et définissez-la sur On :
file_uploads = On
créez un formulaire HTML permettant aux utilisateurs
de choisir le fichier image qu'ils souhaitent télécharger ,
il faut ajouter l’attribut enctype=« multipart/form-
data » dans la balise <POST> :
[Link] Programmation Web II 182
Insertion d’une image (11)
Quelques règles à suivre pour le formulaire HTML ci-dessus :
•Assurez-vous que le formulaire utilise method="post"
•Le formulaire a également besoin de l'attribut suivant :
enctype="multipart/form-data". Il spécifie le type de contenu à utiliser lors de
la soumission du formulaire
Sans les exigences ci-dessus, le téléchargement de fichier ne fonctionnera
pas.
Autres choses à noter :
•L'attribut type="file" de la balise <input> affiche le champ d'entrée comme
un contrôle de sélection de fichier, avec un bouton "Parcourir" à côté du
contrôle d'entrée
[Link] Programmation Web II 183
Insertion d’une image (12)
Nous allons créer une table nommée Files qui contiendra les fichiers à
télécharger
[Link] Programmation Web II 184
Insertion d’une image (13)
Sachez que les fichiers ou images ne sont pas stockés directement dans la
base de données , on y stocke l’url ( le chemin d’acces ) si non la base de
données sera lourde.
Donc dans le dossier qui stocke les fichiers de mon site , je vais créer un sous
fichier nommé Files qui stockera l’ensemble de mes fichiers
(Images,pdf,audio,video)
[Link] Programmation Web II 185
Insertion d’une image (14)
Je vais commencer à mettre quelques codes HTML et PHP
1) HTML
[Link] Programmation Web II 186
Insertion d’une image (15)
2)PHP
Apres avoir téléchargé le fichier nous le résultat ci-dessous
[Link] Programmation Web II 187
Insertion d’une image (16)
Si j’ai besoin d’afficher par exemple le nom du fichier et le type
[Link] Programmation Web II 188
Insertion d’une image (17)
Si j’ai besoin d’afficher par exemple le nom du fichier et le type
Ici nous avons téléchargé deux fichiers
Un document PDF et une image
[Link] Programmation Web II 189
Insertion d’une image (18)
Si j’ai besoin de récupérer l’extension du document
[Link] Programmation Web II 190
Insertion d’une image (19)
Le résultat qui récupère les extensions de deux documents téléchargés est
[Link] Programmation Web II 191
Insertion d’une image (20)
Comme je sais comment récupérer les extensions , je peux autoriser
uniquement les fichiers pfd et les images en png
[Link] Programmation Web II 192
Insertion d’une image (21)
Voici le message si on charge un document qui n’est pas de ces extensions
[Link] Programmation Web II 193
Insertion d’une image (22)
Maintenant je peux envoyer les fichiers dans le dossier Files crée , j’utilise la
fonction move_uploaded_file mais je commence à donner le répertoire
temporaire dans lequel mon fichier est stocké et pour le savoir je fais comme
j’ai fait pour récupérer le nom du fichier mais cette fois ci j’utilise tmp_name
[Link] Programmation Web II 194
Insertion d’une image (24)
Les deux documents sont dans le répertoire Files comme le montre la
figure ci-dessous ,maintenant il faut stocker le nom et url dans la base de
données.
Rappelez –vous que nous avons crée une table nommée documents avec
cette structure
[Link] Programmation Web II 195
Insertion d’une image (25)
Le code utulisé est en dessous
Notons que les documents PNG peuvent etre sockés dans la base de donnée
[Link] Programmation Web II 196
Insertion d’une image (23)
Maintenant deux documents sont déjà envoyés dans le dossier Files
[Link] Programmation Web II 197
Code d’afficher les données insérées
[Link] Programmation Web II 198
VOICI LE RESULTAT
[Link] Programmation Web II 199
Code de supprimer les données
Nous avons crée les liens qui vont nous permettre de modifier nos
données et de les supprimer en cas de besoin, étant ici sur cette
même page d’affichage nous allons créer un script de suppression
qui est le suivant.
Un script facile et simple
[Link] Programmation Web II 200
Code modifier les données(1)
La requête UPDATE permet de modifier une entrée.
Vous venez de vous rendre compte que les
données insérées ou ajoutées ne sont pas
correctes et vous commencez à vous casser la
tête mais ne vous inquiétez pas une requête
simple peut corriger tout. Mais nous allons
commencer à créer le formulaire de
modification et afficher les données à modifier
dans les zones dédiées , le formulaire de
modification se nomme :[Link]
[Link] Programmation Web II 201
Code modifier les données(2)
[Link] Programmation Web II 202
Code modifier les données(3)
[Link] Programmation Web II 203
Les données à modifier (4)
Si on veut faire la modification on doit cliquer sur lien
Modifier
[Link] Programmation Web II 204
Les données à modifier (5)
Et on obtient le formulaire de modification suivant
Supposons nous voulons modifier contenu du message changer
Formation en Java et
mettre Formation Oracle qui est un SGBD le plus utilisé. Nous
saisissons FORMATION ORACLE dans la zone de saisie et nous
obtenons le formulaire suivant
[Link] Programmation Web II 205
Les données à modifier (6)
Apres un clic sur le bouton Modifier, nous sera rederigé
sur la page d’affichage pour voir que la
modification a été effectué avec succes.
[Link] Programmation Web II 206
Formulaire de connexion avant toutes actions(1)
Pour éviter que n’importe qui puisse
entrer dans le système , une connexion
est obligatoire, voici un formulaire
([Link]) de connexion partie
administration . Le css vous allez
améliorer
[Link] Programmation Web II 207
Formulaire de connexion avant toutes actions(2)
[Link] Programmation Web II 208
Formulaire de connexion avant toutes actions(3)
[Link] Programmation Web II 209
Retour sur Insertion des données sans les
doublons(1)
une base de données ne doit pas avoir des données qui
se répètent deux fois ou plusieurs c’est qu’on appelle les
doublons.
[Link] Programmation Web II 210
Tester l’éxistence d’un enregistrement dans la base de
données avant insertion(1)
Cas pratique
if(isset($_POST['boutonValider']))
{
$RecupContenu=$_POST[‘Contenu'];
$RecupDate=$_POST[‘Datee'];
$AffichageMessage = ‘’select * messagef where contenu=:contenuMess and
DatePublication=:DatePublication ’’ ;
$dataMessage= $bdd->prepare($AffichageMessage );
$dataMessage->execute(array(‘contenuMess ’=>
$RecupContenu,’ DatePublication ’=> $RecupDate));
$count= $dataMessage->rowCount();
[Link] Programmation Web II 211
Tester l’éxistence d’un enregistrement dans la base de
données avant insertion(2)
if($count >0)
{
Echo “Enregistrement existe deja “;
}
Else
{
$InsertionMessage = $bdd->prepare( "INSERT INTO
messagef (contenu,DatePublication)
VALUES(:contenu,:DatePublication ) ’’ );
$InsertionMessage ->execute(array(‘contenu
‘=>$RecupContenu, ‘DatePublication’=>$RecupDate));
Echo “Insertion avec succes “;
}
}
[Link] Programmation Web II 212
LE COURS SE TERMINERA PAR LA
REALISATION D’UN PROJET
[Link] Programmation Web II 213