Développement web dynamique:
PHP & MySQL
1
PLAN
➢ Présentation du PHP
➢ La syntaxe de base
➢ Les types
➢ Les variables
➢ Les constantes
➢ Les expressions
➢ Les opérateurs
➢ Les structures de contrôle
➢ Les fonctions
➢ Gestion des erreurs
➢ Les tableaux
➢ La date en PHP
➢ PHP orienté objet
➢ Principe d’encapsulation
➢ Surcharge de propriétés et de
méthodes
➢ Classes étendues et héritage
➢ Les classes et méthodes
abstraites
➢ Étendre des classes abstraites
➢ Les interfaces
➢ Les variables superglobales
➢ Création d’un formulaire HTML
➢ Récupération des données d’un
formulaire
➢ MySQL
➢ Se connecter à une BD MySQL en
PHP
➢ Gestion d’une BD en utilisant
PDO
2
2
3
PHP Data Objects (PDO)
➢ PDO
➢ Bases de données supportées
➢ Classes prédéfinies
➢ Connexions et gestionnaire de connexion
➢ Gestion des erreurs de connexion
➢ Gestion des erreurs : code d'erreur
➢ Gestion des erreurs : exceptions
➢ Exécution d'une requête
➢ Exploitation des résultats d'une requête
➢ Modes de récupération des données
➢ Préparation d'une requête
➢ Association des paramètres d'une requête
➢ Préparation puis exécution d'une requête
➢ Intérêt des requêtes préparées
3
4
Introduction
• Créé en 1994 par Rasmus Lerdorf pour les besoins des pages web
personnelles (livre d’or, compteurs, etc.)
• A l’époque, PHP signifiait Personnal Home Page.
• Il supporte tous les standards du web, gratuit et libre «Open
Source»
• Il existe par ailleurs des applications web prêtes à l’emploi
(PHPNuke, PHP SPIP, PHPSlash…) permettant de monter facilement
et gratuitement son portail.
• Les serveurs d’application les plus utilisés pour développer des sites
web dynamique en PHP :
– EasyPHP
– WAMP
– XAMPP
– ….
4
Client / serveur
5
5
6
Langages côté client et côté serveur
• Un site Internet n’est qu’un ensemble de fichiers de codes liés entre
eux.
• Le code écrit dans ces fichiers, encore appelé « script », va pouvoir
être exécuté soit côté client (navigateur), soit du côté du serveur.
• Les navigateurs ne sont capables de comprendre et de n’exécuter
que du code HTML, CSS et JavaScript.
• Un navigateur est incapable de comprendre du code PHP.
• Lorsqu’un navigateur demande à un serveur de lui servir une page,
le serveur va donc se charger d’exécuter tout code qui ne serait pas
compréhensible par le navigateur et va lui renvoyer le résultat.
6
Où écrire le code PHP ?
• On écrit nos scripts PHP soit dans des fichiers
dédiés soit intégré au sein du code HTML.
• Les fichiers qui contiennent du PHP doivent être
enregistrés avec l’extension .php.
• Nous allons entourer le code PHP avec une balise
PHP qui a la forme suivante :
<?php ?>.
• Les instructions se terminent avec un point
virgule
10:48 PHP & MySQL 7
7
8
Intégration d’un script dans une page
Les pages web dynamiques PHP doivent avoir la structure :
Exemple :
<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?php
//Scripts PHP
echo 'Hello World <br>';
?>
<p>Un paragraphe</p>
</body>
</html>
8
9
Intégration d’un script dans une page
Autres syntaxes d’intégration :
<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?
//Scripts PHP
echo 'Hello World <br>';
?>
<p>Un paragraphe</p>
</body>
</html>
9
10
Intégration d’un script dans une page
Autres syntaxes d’intégration :
<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<script language="php">
echo 'Hello World <br>';
</script>
<p>Un paragraphe</p>
</body>
</html>
//Scripts PHP
10
11
Commentaires
• Un script en langage php se commente comme en langage
C/C++ :
<?php
// commentaire de fin de ligne
/* commentaire
sur plusieurs lignes
*/
?>
• Tout ce qui se trouve dans un commentaire est ignoré. Il est
conseillé de commenter largement les scripts.
12
Affichage
• Les fonctions d’affichage :
– echo : écriture dans le navigateur
– print() : écriture dans le navigateur
– Exemples :
– echo "Bonjour<br>";
– print("Bonjour");
– élément <br> ne sera pas affiché mais va permettre
d’indiquer un retour à la ligne au navigateur.
13
Enregistrer et exécuter un fichier PHP
• Enregistrer le fichier avec l’extension .php
dans le répertoire www si vous utilisé WAMP.
• Pour lancer l’exécution du fichier PHP créé, il
suffit d’ouvrir un nouvel onglet dans du
navigateur favori et de renseigner
l’adresse localhost.
14
Les variables
• Une variable est un conteneur servant à stocker des
informations, comme une chaine de caractères ou un
nombre.
• Une variable ne va exister que durant le temps de
l’exécution du script l’utilisant.
• il y a quelques règles à respecter lors de la déclaration
d’une variable :
– Toute variable doit commencer par le signe $ qui sera suivi du
nom de la variable ;
– Le nom d’une variable doit obligatoirement commencer par une
lettre ou un underscore ;
– Le nom d’une variable ne doit contenir que des lettres, des
chiffres et des underscores mais pas de caractères spéciaux ;
– Le nom d’une variable ne doit pas contenir d’espace.
15
Les variables
• Le typage des variables est implicite en php. Il n’est donc pas
nécessaire de déclarer leur type au préalable ni même de les
initialiser avant leur utilisation.
• Exemple :
<?php
$Nom="je m'appelle Adam";
$age=30;
$Tele="1010";
echo gettype($Tele);
?>
• Il est possible de convertir une variable en un type primitif grâce au
cast (comme en C).
– Exemple :
// $str vaut la chaîne "12"
// $nbr vaut le nombre 12
• $str = "12";
• $nbr = (int)$str;
• echo $nbr
16
Les variables
• Quelques fonctions :
– empty($var) : renvoie vrai si la variable est vide
– isset($var) : renvoie vrai si la variable existe
– unset($var) : détruit une variable
– gettype($var) : retourne le type de la variable
--settype($var, "type") : convertit la variable en type :
(Integer, string )
– vérifier si une variable est
is_long(), is_double(), is_string(), is_array(), is_object(), is_bool(),
is_float(), is_numeric(), is_integer(), is_int()…
17
Les variables
• La portée d’une variable est limitée au bloc dans
lequel elle a été crée.
• Une variable locale à une fonction n’est pas
connue dans le reste du programme.
• Une variable du programme n’est pas connue
dans une fonction.
• Une variable créée dans un bloc n’est pas connue
dans les autres blocs, mêmes supérieurs.
10:4 18
Types de données
• En PHP, on distingue 8 types de données différents:
– Le type String ( chaine de caractères );
– Le type Integer ( nombre entier );
– Le type Float ( nombre décimal );
– Le type Boolean ( booléen );
– Le type Array ( tableau );
– Le type Object ( objet );
– Le type NULL (NULL );
– Le type Resource (ressource);
• Le type de données Null est un type un peu particulier
puisqu’il correspond à l’absence de valeur et sert donc
à représenter des variables vides en PHP.
10:4 19
Chaîne de caractères
• Le premier type de données qu’une variable va
pouvoir stocker est le type String ou chaîne de
caractères.
• Une chaine de caractères est une séquence de
caractères,
• Toute valeur stockée dans une variable en
utilisant des guillemets ou des apostrophes sera
considérée comme une chaine de caractères,
10:4 20
Constantes
• L’utilisateur peut définir des constantes dont la valeur est fixée une
fois pour toute.
• Les constantes ne portent pas le symbole $ (dollars) et ne sont pas
modifiables.
• Syntaxe :
define("var",valeur) : définit la constante var (sans $) de valeur,
• Exemples :
define("author", "Test");
echo author; // affiche Test
define("MY_YEAR", 1990);
echo MY_YEAR; // affiche 1990
10:4 21
Les opérateurs
• Un opérateur est un symbole qui va être utilisé pour
effectuer certaines actions notamment sur les variables
et leurs valeurs.
– Les opérateurs arithmétiques ;
– Les opérateurs d’affectation ;
– Opérateurs sur les bits ;
– Opérateurs de comparaison ;
– Opérateur de contrôle d’erreur ;
– Opérateurs d’incrémentation et décrémentation ;
– Les opérateurs logiques ;
– Opérateurs de chaînes ;
– Opérateurs de tableaux ;
– Opérateurs de types ;
10:4 22
Opérateur de concaténation (le point)
• Exemple:
<?php
$prenom = "Adam";
$nom = "Salim";
$age = 12;
echo "Je m'appelle $prenom et j'ai $age ans <br>";
echo "Je m'appelle {$prenom} et j'ai {$age} ans <br>";
echo 'Je m'appelle $prenom et j'ai $age ans <br>';
$var1 = "Je suis $prenom $nom, j'ai $age ans <br>";
$var2 = "Je suis {$prenom} {$nom}, j'ai {$age} ans <br>";
$var3 = 'Je suis $prenom $nom, j'ai $age ans';
$var4= "Je suis " .$prenom. " " .$nom. ", j'ai " .$age. " ans";
$var5= 'Je suis ' .$prenom. ' ' .$nom. ', j'ai '.$age. ' ans';
echo $var1;
echo $var2;
echo $var3;
echo $var4;
echo $var5;
?>
10:4 23
Les opérateurs arithmétiques
• En PHP, nous allons pouvoir utiliser les
opérateurs arithmétiques suivants :
Opérateur Nom de l’opération associée
+ Addition
- Soustraction
* Multiplication
/ Division
% Modulo (reste d’une division euclidienne)
** Exponentielle (élévation à la puissance d’un nombre par un autre)
10:4 24
Les opérateurs arithmétiques
• Exemple:
<?php
$x = 2 + 3 * 4; //$x stocke 14
$y = (2 + 3) * 4; //$y stocke 20
$z = 2 ** 3 - 4 * 4 / 8; //$z stocke 6
echo '$x : ' .$x. '<br>$y : ' .$y. '<br>$z : ' .$z;
?>
10:4 25
Les opérateurs d’affectation / combinés
Les opérateurs d’affectation permettent d’affecter une
certaine valeur à une variable:
Opérateur Définition
.= Concatène puis affecte le résultat
+= Additionne puis affecte le résultat
-= Soustrait puis affecte le résultat
*= Multiplie puis affecte le résultat
/= Divise puis affecte le résultat
%= Calcule le modulo puis affecte le résultat
**=
8
Élève à la puissance puis affecte le résultat
10:4 26
Les opérateurs d’affectation / combinés
• Exemple:
<?php
$a = "Bonjour";
$a .= " le monde"; //$a stocke "Bonjour le monde"
echo '$a stocke : ' .$a. '<br>';
$x = 5;
$x -= 3; //$x stocke désormais 2
echo '$x stocke : ' .$x. '<br>';
$y = 3;
$y **= $x;
echo '$y stocke : ' .$y;
//$y stocke 3^2 = 3 * 3 = 9
?>
$y à la puissance $x
10:4 27
Les opérateurs de comparaison
Opérateur Définition
== Permet de tester l’égalité sur les valeurs
=== Permet de tester l’égalité en termes de valeurs et de types
!= Permet de tester la différence en valeurs
<> Permet également de tester la différence en valeurs
!== Permet de tester la différence en valeurs ou en types
< Permet de tester si une valeur est strictement inférieure à une autre
> Permet de tester si une valeur est strictement supérieure à une autre
<= Permet de tester si une valeur est inférieure ou égale à une autre
>= Permet de tester si une valeur est supérieure ou égale à une autre
10:4 28
Les opérateurs de comparaison
<?php
$x = 4; //On affecte la valeur 4 à $x
/*On compare la valeur contenue dans $x à 4 en valeur.
*On renvoie le résultat de la comparaison grâce à var_dump()*/
var_dump($x == 4);
echo '<br>';
var_dump($x > 7);
echo '<br>';
/*On compare la valeur de $x à la chaine de caractères "4" en
*valeur simplement*/
var_dump($x == "4");
echo '<br>';
/*On compare la valeur de $x à la chaine de caractères "4" en
*termes de valeur et de type*/
var_dump($x === "4");
echo '<br>';
var_dump($x != "4");
echo '<br>';
var_dump($x !== "4");
echo '<br>';
?>
10:4 29
Les opérateurs de comparaison
• Lorsqu’on utilise un triple égal ===, on cherche
à effectuer une comparaison non seulement
sur la valeur mais également sur le type des
deux opérandes.
• La fonction var_dump() est utilisée pour
afficher des informations structurées (type et
valeur) sur une ou plusieurs variables.
10:4 30
La condition if en PHP
• La condition if va nous permettre d’exécuter un bloc
de code si et seulement si le résultat d’un test
vaut true.
• Exemple:
<?php
$x = 4; //On affecte la valeur 4 à $x
$y = 2; //On affecte la valeur 2 à $y
if($x > 1){
echo '$x contient une valeur supérieure à 1'; }
if($x == $y){
echo '$x et $y contiennent la même valeur'; }
?>
La condition if…else en PHP
• La structure conditionnelle if…else nous permet d’exécuter
un premier bloc de code si un test renvoie true ou un autre
bloc de code dans le cas contraire.
• Exemple
<?php
$x = 4; //On affecte la valeur 4 à $x
$y = 2; //On affecte la valeur 2 à $y
if($x > 1){
echo '$x contient une valeur stric. supérieure à 1 <br>'; }
else{
echo '$x contient une valeur inférieure ou égale à 1 <br>';
}
if($x == $y){
echo '$x et $y contiennent la même valeur <br>';
}else{
echo '$x et $y contiennent des valeurs différentes <br>';
}
10:48 ?> 31
31
32
La condition if…elseif…else en PHP
• La condition if…elseif…else est une structure conditionnelle
encore plus complète que la condition if…else puisqu’elle
nous permet de générer autant de cas que l’on souhaite.
• Exemple:
<?php
$x = 4; //On affecte la valeur 4 à $x
$y = 2; //On affecte la valeur 2 à $y
if($x > 1){
echo '$x contient une valeur stric. supérieure à 1 <br>';
}elseif($x == 1){
echo '$x contient la valeur 1 <br>';
}else{
echo '$x contient une valeur stric. inférieure à 1 <br>';
}
?>
33
Les opérateurs logiques
• Les opérateurs logiques vont être principalement
utilisés avec les conditions:
Opérateur Définition
AND Renvoie true si toutes les comparaisons valent true
&& Renvoie true si toutes les comparaisons valent true
OR Renvoie true si une des comparaisons vaut true
|| Renvoie true si une des comparaisons vaut true
XOR Renvoie true si une des comparaisons exactement vaut true
! Renvoie true si la comparaison vaut false (et inversement)
34
Les opérateurs logiques
• Exemple
<?php
$x = 4;
$y = -12;
//On affecte la valeur 4 à $x
//On affecte la valeur -12 à $y
if($x >= 0 AND $x <= 5){
echo '$x contient une valeur entre 0 et 5 <br>';
}
?>
L’instruction switch
<?php
$x = 2;
switch($x){
case 0:
echo '$x stocke la valeur 0';
break;
case 1:
echo '$x stocke la valeur 1';
break;
case 2:
echo '$x stocke la valeur 2';
break;
case 3:
echo '$x stocke la valeur 3';
break;
default:
echo '$x ne stocke pas de valeur entre 0 et 4';
}
10:48 ?> 35
35
36
Les boucles
• Les boucles vont nous permettre d’exécuter
plusieurs fois un bloc de code tant qu’une
condition donnée est vérifiée.
• Nous disposons de quatre boucles différentes
en PHP :
– La boucle while (« tant que ») ;
– La boucle do… while (« faire… tant que ») ;
– La boucle for (« pour ») ;
– La boucle foreach (« pour chaque ») ;
37
La boucle while
• La boucle while va nous permettre d’exécuter un
certain bloc de code tant qu’une condition donnée est
vérifiée.
• Exemple:
<?php
$x = 0;
while($x <= 10){
echo '$x contient la valeur ' .$x. '<br>';
$x++;
}
?>
38
la boucle do… while
• la boucle do… while nous permet d’exécuter un
code tant qu’une condition donnée est vraie,
• Cette fois-ci le code sera exécuté avant que la
condition soit vérifiée.
• Exemple :
<?php
$y = 20;
do{
echo '$y contient la valeur ' .$y. '<br>';
$y++;
}while($y <= 5);
?>
39
La boucle for
• La boucle for fonctionne selon trois phases :
– Une phase d’initialisation ;
– Une phase de test ;
– Une phase d’incrémentation.
Exemple:
<?php
for($x = 0; $x <= 5; $x++){
echo '$x contient la valeur ' .$x. '<br>';
}
?>
La boucle foreach
• La boucle foreach est particulièrement efficace pour
lister les tableaux associatifs dont il n’est nécessaire de
connaître ni le nombre d’éléments ni les clés.
• Syntaxe :
foreach($tableau as $valeur)
{
//bloc utilisant la valeur de l'élément courant
Echo $valeur
}
• La variable $valeur contient successivement chacune
des valeurs du tableau.
40
La boucle foreach
• la deuxième syntaxe est la suivante :
foreach($tableau as $cle=>$valeur)
{
//bloc utilisant la valeur et la clé de l'élément courant
}
• la variable $cle contient successivement l’indice
ou la clé de chacun des éléments du tableau
dans l’ordre numérique pour les tableaux indicés
et dans l’ordre de création des éléments pour
les tableaux associatifs.
• La variable $valeur contient la valeur associée
à la $clé ou à l’indice courant.
41
La boucle foreach
<?php
//Création d'un tableau associatif
for($i=0;$i<=8;$i++)
{
$tab["client".$i] = rand(100,1000);
}
//Lecture des clés et des valeurs
foreach($tab as $cle=>$val)
{
echo " Le client de login <b>$cle</b> a le code <b>$val</b><br>";}
?>
Le client de login client0 a le code 638
Le client de login client1 a le code 569
........................................
42
43
L’instruction break
• Il est possible d’arrêter complètement une boucle for,
foreach , do…while ou while avant son terme normal si
une condition particulière est vérifiée, à l’aide de
l’instruction break.
• Le script n’est pas arrêté, comme avec l’instruction
exit, et seule la boucle en cours se termine.
• Pour arrêter plusieurs boucles en même temps, on
emploie la syntaxe suivante :
– break n; // n doit être non nul
– n désigne le nombre de boucles les plus internes que
vous souhaitez fermer.
44
L’instruction break
• Exemple:
<?php
for($j=0;$j<2;$j++)
for($i=0;$i<5;$i++)
{
if($i==2)
break 2;
echo 'Bonjour une '.$i.‘ fois <br>';
}
?>
45
L’instruction continue
• l’instruction continue n’arrête pas la boucle
en cours mais seulement l’itération en
cours.
• La variable compteur est incrémentée
immédiatement, et toutes les instructions
qui suivent le mot-clé continue ne sont pas
exécutées lors de l’itération en cours.
46
L’instruction continue
• Exemple:
<?php
//Interruption d'une boucle for
for($i=0;$i<20;$i++)
{
if($i%5==0) {
continue;
}
echo $i,"<br>";
}
47
L’instruction goto
• goto renvoie l’exécution en un point précis du
script marqué par un label (dit aussi étiquette),
• un label est constitué par une chaîne de
caractères terminée par le caractère :
• Exemple:
<?php
goto label_1;
echo 'Cacher';
label_1 :
echo 'Voir';
?>
48
Gestion des erreurs
• La gestion des erreurs a pour but de signaler les problèmes au
visiteur et d’éviter l’affichage des messages d’erreur bruts tels que
PHP les envoie au navigateur.
• Exemple:
<?php
$a=10;
$b=0;
echo $a/$b;
fopen("inconnu.txt","r");
?>
• les messages suivants apparaissent:
– Fatal error: Division by zero
– Warning: fopen(inconnu.txt) [function.fopen]: failed to open stream:
No such file or directory
49
Gestion des erreurs
• Le premier message correspond à la division
par 0,
• le second à la tentative d’ouverture d’un
fichier qui n’existe pas.
• Faire précéder l’appel d’une fonction du
caractère @ permet d’éviter l’affichage des
messages d’erreur:
– @fopen("inconnu.txt","r").
50
Gestion des erreurs
• Utiliser la fonction error_reporting(), qui permet de
n’afficher que certains messages selon le type d’erreur.
• Sa syntaxe est
– int error_reporting ( [int niveau]).
• C’est le paramètre niveau qui permet de choisir le niveau
d’affichage des messages d’erreur.
• Vous pouvez combiner plusieurs valeurs avec l’opérateur
|, comme dans le code suivant :
– error_reporting(E_WARNING | E_PARSE) ;
– qui permet de n’afficher que les alertes et les erreurs de
syntaxe.
• Pour bloquer tous les messages d’erreur, il faut passer à la
fonction le paramètre 0. Cette fonction doit être utilisée
dès le début du script.
51
Gestion des erreurs
Constante Valeur Niveau d’affichage
E_ERROR 1 Erreur fatale qui provoque l’arrêt du script, par exemple,
l’appel d’une fonction qui n’existe pas.
E_WARNING 2 Avertissement ne provoquant pas l’arrêt du script, par
exemple, une division par 0.
E_PARSE 4 Erreur de syntaxe détectée par l’analyseur PHP et provoquant
l’arrêt du script, par exemple l’oubli du point-virgule en fin de
ligne.
E_NOTICE 8 Avis que le script a rencontré un problème simple qui peut ne
pas être une erreur.
E_ALL 4095 Toutes les erreurs
Les principales valeurs sont indiquées dans le tableau suivant.
<?php
// Turn off all error reporting
error_reporting(0);
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
// Report all PHP errors
error_reporting(E_ALL);
// Report all PHP errors
error_reporting(-1);
// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
?>
52
Gestion des erreurs
53
Gestion des exceptions
• Définition:
Une exception est un mécanisme qui permet
d’intercepter une erreur générée par un script et
de déclencher une action en réponse à cette erreur.
• Gérer une exception consiste à
– délimiter un ou des blocs de code
– et à prévoir une action particulière qui doit être
réalisée dans le cas où l’erreur prévue se produit.
54
Gestion des exceptions
• Créez un bloc à l’aide de try:
– try délimite le code dans lequel peut survenir
une erreur.
– Ce bloc contient une instruction throw pour
déclencher l’exception en créant un objet de type
Exception à l’aide du mot-clé new.
55
Gestion des exceptions
• Créez un bloc à l’aide de catch associée au bloc try
précédent.
– Il comporte le code qui va gérer l’erreur si elle se
produit.
– C’est ce bloc qui utilise l’objet Exception créé par
l’instruction throw.
– Si aucune erreur ne se produit dans le bloc try, l’objet
Exception n’est pas créé, et le code du bloc catch est
ignoré.
– L ’exécution se poursuit dans tous les cas après le bloc
catch.
56
Gestion des exceptions
• Créez un bloc finally qui contient le code à exécuter
obligatoirement, qu’une erreur se soit produite ou non.
• Un gestionnaire d’exceptions a donc la structure suivante :
<?php
try
{
// Code à surveiller
if(erreur prévue){throw new Exception();}
else{// Résultat;}
}
catch(Exception $except)
{
// Gestion de l’erreur
}
finally
{
//Code qui sera forcément exécuté
}
?>
Gestion des exceptions
• Le constructeur de l’objet Exception créé dans
l’instruction throw reçoit deux paramètres,
– Message(une chaîne contenant le message d’erreur),
– code de l’objet(un entier qui définit un code
d’erreur).
• Cet objet est utilisé dans le bloc catch en appelant
ses méthodes pour afficher des informations sur
l’exception.
• Le tableau suivant donne la liste et le rôle des
10:48méthodes de l’objet Exception. 56
57
58
Les méthodes de l’objet Exception
Méthode Définition
construct() Constructeur de l’objet. Il est appelé automatiquement lors de la
création d’un objet avec le mot-clé new. Il définit les propriétés
message et code de l’objet. Cette méthode ne doit pas être appelée
explicitement.
getMessage() Retourne la valeur de la propriété message dans une chaîne.
getCode() Retourne la valeur de la propriété code sous la forme d’un entier.
getFile() Retourne la valeur de la propriété file qui contient le nom et le chemin
d’accès du fichier dans lequel s’est produite l’erreur.
getLine() Retourne la valeur de la propriété line qui indique le numéro de ligne à
laquelle a été créée l’exception.
toString() Retourne une chaîne contenant toutes les informations sur l’exception.
59
Création d’un gestionnaire d’exceptions
<?php
$a=100;
$b=0;
try
{
if($b==0){throw new Exception("Division par 0",7);}
else{echo "Résultat de : $a / $b = ",$a/$b;}
}
catch(Exception $except)
{
echo "Message d'erreur :",$except->getMessage(),"<hr>";
echo "Nom du fichier :",$except->getFile(),"<hr>";
echo "Numéro de ligne :",$except->getLine(),"<hr>";
echo "Code d'erreur :",$except->getCode(),"<hr>";
echo " toString :",$except-> toString(),"<hr>";
}
finally
{
echo "L'exception a été gérée, le script continue<hr/>";
}
echo "Vraie Fin";
?>
<?php
function inverse($x) {
if (!$x) {
throw new Exception('Division par zéro.');
}
return 1/$x;
}
try {
echo inverse(5) . "n";
} catch (Exception $e) {
echo 'Exception reçue : ', $e->getMessage(), "n";
} finally {
echo "Première fin.n";
}
try {
echo inverse(0) . "n";
} catch (Exception $e) {
echo 'Exception reçue : ', $e->getMessage(), "n";
} finally {
echo "Seconde fin.n";
}
// On continue l'exécution
echo "Bonjour le monde !n";
?>
60
<?php
try{
try {
throw new Exception("Hello");
} catch(Exception $e) {
echo $e->getMessage()." catch inn";
throw $e;
} finally {
echo $e->getMessage()." finally n";
throw new Exception("Bye");
}
} catch (Exception $e) {
echo $e->getMessage()." catch outn";
}
?>
The output is:
Hello catch in
Hello finally
Bye catch out
61
Intercepter plusieurs types d'exceptions
62
Gestion de plusieurs exceptions
63
64
Les tableaux
• La fonction array()
– La fonction array() permet de créer de manière
rapide des tableaux indicés ou associatifs.
$tab = array(valeur0, valeur1, …, valeurN);
– Elle peut être remplacée par une syntaxe courte
en écrivant simplement [] à la place de la fonction
array().
$tab=[valeur0, valeur1, …, valeurN];
65
Les tableaux
• Les tableaux indicés
La façon la plus élémentaire de créer un tableau
indicé est:
$tab[n] = valeur;
• n est un indice entier quelconque,
• valeur est un scalaire ou une variable de type
integer, double, boolean, string ou array.
66
Les tableaux
• Les tableaux associatifs
La même fonction array() permet aussi de créer
rapidement un tableau associatif en définissant
pour chacun de ses éléments une clé et une valeur.
$tab= array("cléA"=>'valeurA', "cléB"=>'valeurB',…
"cléZ"=>'valeurZ')
Ou encore:
$tab= ["cléA"=>'valeurA', "cléB"=>'valeurB',
"cléZ"=>'valeurZ'];
67
Tableaux associatifs - parcours
$cles = array_keys($t);
for ($i = 0; $i < sizeof($cles); $i++) {
echo $cles[$i], $t[$cles[$i]];
}
//ou avec foreach
foreach ($t as $key => $value) {
echo $key, $value;
}
NB: array_keys — Renvoie toutes les clés ou un
sous-ensemble des clés d'un tableau
<?php
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));
$array = array("color" => array("blue", "red", "green"),
"size" => array("small", "medium", "large")
);
print_r(array_keys($array));
?>
68
69
Les tableaux
• Les tableaux multidimensionnels
– PHP ne comporte pas de méthode explicite de
création de tableaux multidimensionnels.
– Un élément de tableau peut être un tableau lui-
même.
– La création de tableau comportant un nombre
quelconque de dimension en est d’autant facilitée.
70
Les tableaux
Exemple:
<? Php
$A=array( array('a00','a01','a02'), array('a10','a11','a12'),
array('a20','a21','a22'));
//Affichage des éléments du tableau
for($i=0; $i<count($A); $i++)
{
echo "<br>";
for($j=0; $j<count($A[$i]); $j++)
{ echo " ".$A[$i][$j]; }
}
?>
• Afin de visualiser la structure complète du tableau $A, vous pouvez utiliser la
fonction print_r($A),
• La fonction var_dump($A) permet d’afficher un ensemble d’informations
encore plus complètes sur le tableau.
• La fonction count($A) détermine le nombre d’éléments d’un tableau.
71
Lecture d’un tableau
-for-
• Tableau unidimensionnelle
<?php
$tab=array("Beni Mellal", "Rabat", "Casa");
for ($i=0;$i<count($tab);$i++)
{
echo "L'élément $i est $tab[$i]<br>";
}
?>
– Le listing fournit le résultat suivant :
• L'élément 0 est Beni Mellal
• L'élément 1 est Rabat
• L'élément 2 est Casa
72
Lecture d’un tableau
-while-
<?php
$tab=array("Beni Mellal", "Rabat", "Casa");
$i=0;
while(isset($tab[$i]) )
{
echo "L'élément $i est $tab[$i] <br >";
$i++;
}
?>
• L’expression isset($tab[$i]) prend la valeur TRUE tant que
l’élément désigné par $tab[$i] existe.
• Sinon, elle prend la valeur FALSE, ce qui est le cas en fin de tableau.
• Vous pouvez initialiser la variable $i à 0 avant de démarrer la boucle
de lecture au cas où elle aurait été utilisée auparavant dans le script
et conserverait une valeur.
73
Lecture d’un tableau
- each-
• $element = each($tab);
• la fonction each() reçoit comme paramètre
une variable de type array.
• Elle retourner un tableau à quatre éléments
qui contient les informations sur l’élément
courant du tableau passé en paramètre
puis de pointer sur l’élément suivant.
74
Lecture d’un tableau unidimensionnel : each
• $element est le tableau de résultats contenant les
informations sur l’élément courant de $tab, sous la forme :
– $element[0], qui contient l’indice de l’élément courant.
– $element[1], qui contient la valeur de l’élément courant.
– $element["key"], qui contient la clé de l’élément courant.
– $element["value"], qui contient la valeur de l’élément courant.
• Les couples $element[0]-$element[1] sont généralement
utilisés pour récupérer les couples indice-valeur des
tableaux indicés,
• les couples $element["key"]-$element["value"] pour
récupérer les couples clé-valeur des tableaux associatifs.
75
Lecture d’un tableau
-each()-
<?php
$tab=array("Paris","London","Brüssel");
$tab[9]="Berlin";
reset($tab);
while($element=each($tab))
{
echo "L'élément d'indice $element[0] a la valeur
$element[1]<br >";
}
echo "<hr>";
?>
76
Lecture d’un tableau
-each()-
<? PHP
$tab=array("France"=>"Paris","GreatBritain"=>"London",
"Marocco"=>"Rabat");
$tab["Deutschland"]="Berlin";
reset($tab);
while($element=each($tab))
{
echo "L'élément de clé {$element['key']} a la valeur
{$element['value']}<br>";
}
?>
• La notation {$element['key']} permet que l’élément soit évalué à
l’intérieur de la chaîne de caractères.
• Le fait d’écrire à la place $element['key'] provoque une erreur.
• Pour vous assurer que le pointeur interne du tableau est positionné au
début du tableau, vous pouvez appeler la fonction reset(),
Lecture d’un tableau : for
• multidimensionnel
<?php
$clients = array( array ("Lina", "Paris", "35"),
array("Mohammed", "beni mellal", "22"),
array("Berou","Saint Cloud","47") );
echo "<table border="1" width="100%" >";
// En-tête du tableau
echo "<thead><tr> <th> Client </th><th> Nom </th><th>
Ville </th><th> Age </th> </tr></thead>";
// Pied de tableau
echo "<tfoot> <tr><th> Client </th><th> Nom </th><th>
Ville</th><th>Age </th></tr></tfoot><tbody>";
10:48 72
77
Lecture d’un tableau
-for-
// Lecture des indices et des valeurs
for ($i=0; $i<count($clients); $i++)
{
echo "<tr><td align="center"><b>$i </b></td>";
for($j=0; $j<count($clients[$i]); $j++)
{ echo "<td><b>", $clients[$i][$j]," </b></td>"; }
echo "</tr>";
}
echo "</tbody></table>";
?>
• La première parcourt les éléments du tableau $clients à
l’aide d’un compteur $i.
• la seconde boucle de compteur $j lit l’ensemble des
10:4
é
8 léments contenus dans ces tableaux. 73
78
79
Lecture d’un tableau
-while-
<?php
$clients = array(array ("Lina", "Paris", "35"),
array("Mohammed", "Beni mellal", "22"),
array("Berrou","Saint Cloud","47"));
/* Ajout d’un élément */
$clients[7] = array("Duval","Marseille","76");
// Création du tableau HTML
echo "<table border="1" width="100%" >
<thead><tr> <th> Client </th><th> Nom</th><th> Ville
</th><th> Age </th></tr></thead>
<tfoot> <tr><th> Client </th><th> Nom </th><th> Ville
</th><th> Age </th></tr></tfoot><tbody>";
// Lecture des éléments
$i=0;
80
Lecture d’un tableau multidimensionnel: while
while(isset($clients[$i]))
{
echo "<tr><td align="center"><b>$i </b></td>";
$j=0;
while(isset($clients[$i][$j]))
{ echo "<td><b>",$clients[$i][$j]," </b></td>";
$j++; }
echo "</tr>";
$i++; }
Echo " </tbody> </table>" ;
?>
• La fonction isset($var ) retourne la valeur FALSE si la variable $var existe mais n’est
pas initialisée ou si elle a la valeur NULL, et la valeur TRUE si elle a une valeur
quelconque.
• L ’expression booléenne isset($tab[$i] [$j]) est évaluée de la même façon que
précédemment.
• Le compteur $j du nombre d’éléments est également initialisé à 0 avant le début
de la boucle
81
Lecture d’un tableau multidimensionnel: each
<?php
$clients = array( array ("Leparc", "Paris", "35"), array("Duroc", "Vincennes",
"22"), array("Denoël","Saint Cloud","47") ) ;
$clients[7] = array("Duval","Marseille","76");
echo "<table border="1"><tbody>";
while($element=each($clients))
{
echo "<tr><td> élément <b> $element[0] </b></td>";
while($val=each($element[1]))
{
echo "<td><b>",$val[1]," </b></td>";
}
echo "</tr>";
}
echo " </tbody> </table> <hr />";
?>
Lecture d’un tableau multidimensionnel: each
<?php
$clients = array(
array("client1"=>"Leparc","ville1"=>"Paris","age1"=>"35"),
array("client2"=>"Duroc","ville2"=>"Vincennes","age2"=>"22"),
array("client3"=>"Denoël","ville3"=>"Saint Cloud","age3"=>"47"));
$clients[7] = array("client7"=>"Duval","ville7"=>"Marseille","age7"=>"76");
echo " <table border="1"><tbody> ";
while($element=each($clients))
{
echo "<tr><td> élément <b> $element[0] </b></td>";
while($val=each($element[1]))
{
echo "<td> clé :<b>",$val[0],"</b></td><td><b>",$val[1]," </b></td>";
}
echo "</tr>";
}
echo " </tbody> </table>";
?>
10:48 77
82
83
Lecture d’un tableau unidimensionnel: foreach
• Lecture de tableau indicé sans récupération
des indices
<?php
$tab=array("Paris","London", "Rabat");
echo "<H3>Lecture des valeurs des éléments </H3>";
foreach($tab as $ville)
{
echo "<b>$ville</b> <br>";
}
echo"<hr>";
?>
84
Lecture d’un tableau unidimensionnel: foreach
Lecture de tableau avec récupération des indices
<?php
echo "<h3>lecture des indices et des valeurs des éléments
</h3>";
foreach($tab as $indice=>$ville)
{
echo "L'élément d'indice <b>$indice</b> a la valeur
<b>$ville</b><br>";
}
echo"<hr>";
?>
85
Lecture d’un tableau unidimensionnel: foreach
• Lecture de tableau associatif avec récupération
des clés
<?php
$tab2=array("France"=>"Paris","Great
Britain"=>"London","België"=>"Brüssel");
echo "<h3>lecture des clés et des valeurs des éléments</h3>";
foreach($tab2 as $cle=>$ville)
{
echo "L'élément de clé <b>$cle</b> a la valeur <b>$ville</b>
<br>";
}
echo"<hr>";
?>
86
Lecture d’un tableau multidimensionnel: foreach
<?php
$clients = array(
"client 1"=>array("nom 1"=>"Leparc","ville 1"=>"Paris","age 1"=>"35"),
"client 2"=>array("nom 2"=>"Duroc","ville 2"=>"Vincennes","age 2"=>"22"),
"client 3"=>array("nom 3"=>"Denoël","ville 3"=>"St Cloud","age 3"=>"47"));
$clients["client 7"] = array("nom 7"=>"Duval","ville 7"=>"Marseille","age
7"=>"76");
echo "<table border="1" width="100%" ><thead><tr> <th> Client </th><th>
Nom </th>
<th> Ville </th><th> Age </th></tr></thead><tbody>";
foreach($clients as $cle=>$tab)
{
echo "<tr><td align="center"><b> $cle </b></td>";
foreach($tab as $key=>$valeur)
{ echo "<td> $key : <b> $valeur </b></td>"; }
echo "</tr>";
}
echo " </tbody> </table> "
?>
87
Lecture d’un tableau multidimensionnel: foreach
<?php
$clients=array(
array("Leparc","Paris","35"),
array("Duroc","Vincennes","22"),
array("Denoel","St Cloud","47"),
array("Duval","Marseille","76")
);
foreach($clients as list($nom,$ville,$age))
{
echo "$nom $ville $age <br/>";
}
?>
88
Manipuler des tableaux
• sort(array &$array, int $flags ): bool
• Type de drapeaux de tri :
– SORT_REGULAR - Traiter les valeurs telles qu’elles sont
– SORT_NUMERIC - compare les éléments
numériquement
– SORT_STRING - compare les éléments comme des chaînes
de caractères
– SORT_FLAG_CASE - peut être combiné (OU bit à bit)
avec SORT_STRING ou SORT_NATURAL pour trier les
chaînes sans tenir compte de la casse
NB: rsort() - Trie un tableau en ordre décroissant
89
Manipuler des tableaux
• Exemple:
<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "n";}
?>
• L'exemple ci-dessus va afficher :
– fruits[0] = apple
– fruits[1] = banana
– fruits[2] = lemon
– fruits[3] = orange
90
91
92
Manipuler des tableaux
• Créer un tableau à partir d’une chaîne
– Vous pouvez créer des tableaux en décomposant une
chaîne de caractères en un ensemble de sous-chaînes,
dont chacune devient un élément de tableau.
– Le critère de coupure de la chaîne est un caractère
quelconque à choisir par le programmeur.
– Cette opération peut être effectuée au moyen de la
fonction :
array explode(string "coupe", string $chaine, [int nbmax]);
– explode() retourne un tableau composé des sous-chaînes
de $chaine créées avec le critère de coupure contenu
dans la chaîne "coupe", l’entier nbmax facultatif
donnant le nombre maximal de sous-chaîne désiré.
93
Manipuler des tableaux
• Exemple :
<?php
$chaine="La cigale et la fourmi";
$tab_chaine = explode(" ",$chaine);
foreach($tab_chaine as $key => $val)
echo "<br>* L’indice ".$key ." contient '".$val."'<br>";
?>
* L’indice 0 contient 'La'
* L’indice 1 contient 'cigale'
* L’indice 2 contient 'et'
* L’indice 3 contient 'la'
* L’indice 4 contient 'fourmi'
94
Manipuler des tableaux
• La fonction implode transforme un tableau en chaîne
de caractères. On peut spécifier un séparateur pour les
éléments.
• echo implode(",", $tableau); imprime tous les éléments
de $tableau, séparés par des virgules.
• Exemple:
<?php
$tab= array("Hello", "World", "Beautiful","Day");
echo implode(" ",$tab);
?>
95
Manipuler des tableaux
• La fonction array_count_values():
$result = array_count_values($tab)
– retourne le tableau associatif $result, ayant pour
clés les valeurs du tableau $tab et pour valeur
associée à chaque clé le nombre de fois que
chacune apparaît dans le tableau $tab.
– La fonction array_count_values() ne s’applique
que si les éléments sont de type integer, double
ou string mais pas de type array.
96
Manipuler des tableaux
• Extractions:
– la fonction array_slice() permet d’effectuer divers
types d’extractions.
– Sa syntaxe est la suivante :
• $sous_tab = array_slice(array $tab, int ind, int nb)
• Elle retourne le sous-tableau dans la variable $sous_tab.
– Si ind et nb sont positifs, le tableau $sous_tab
contient nb éléments du tableau initial extrait en
commençant à l’indice ind.
– Par exemple, array_slice($tab,2,3) retourne un tableau
comprenant trois éléments extraits à partir de l’indice
2.
97
Manipuler des tableaux
• Exemple:
– array_slice($tab,-5, 4) retourne 4 éléments de $tab
extraits en commençant au cinquième à partir de la
fin.
– array_slice($tab,2, -4) retourne tous les éléments à
partir de l’indice 2 jusqu’à la fin, sauf les quatre
derniers.
– array_slice($tab,-5,-2) retourne 3 éléments compris
entre les indices virtuels -5 compris et -2 non compris.
98
Ajouter et enlever des éléments
• La fonction :
– int array_push($tab, valeur1, valeur2,…, valeurN)
ajoute en une seule opération les N éléments passés
en paramètres à la fin du tableau $tab.
– int array_unshift($tab, valeur1, valeur2,…,valeurN)
ajoute également au début du tableau $tab les N
éléments passés en paramètres. Les indices
existants sont tous décalés de la valeur N.
99
Ajouter et enlever des éléments
• La fonction :
– array_pop($tab)
qui supprime le dernier élément du tableau $tab et retourne
cet élément s’il existe ou la valeur NULL dans le cas contraire,
par exemple si le tableau est vide ou si le paramètre $tab
n’est pas de type array.
– array_shift($tab)
supprime et retourne le premier élément du tableau $tab,
– les fonctions array_push() et array_pop() se comporte
comme une pile dotée respectivement de fonctions
d’empilement et de dépilement.
100
Ajouter et enlever des éléments
– La fonction
unset()
supprime un élément d’indice ou de clé quelconque d’un
tableau en précisant explicitement le nom de l’élément et
son indice ou sa clé.
– Exemple :
• unset($tab[4])
supprime l’élément d’indice 4 du tableau $tab
• unset($tab["quatre"])
supprime l’élément dont la clé est "quatre".
101
Ajouter et enlever des éléments
• La fonction array_unique($tab)
– retourne un nouveau tableau ne contenant que la
première occurrence de chaque valeur présente
plusieurs fois dans le tableau $tab.
– Les indices ou les clés associés à chaque élément
sont conservés,
– le tableau retourné comporte des «trous » dans la
suite des indices si ces derniers sont numériques.
102
Ajouter et supprimer des éléments
Exemple:
<?php
$tab =array("Jack","Paul","Pierre",
"Paul","Jack","Paul");
$tab2 = array_unique($tab);
print_r($tab2);
?>
103
Fusion de tableaux
–La fonction $tab = array_merge($tab1,$tab2,…,$tabN)
retourne dans $tab l’ensemble des éléments présents
dans les tableaux $tab1, $tab2, …, $tabN.
– Exemple:
<?php
echo "Tableaux indicés <br>";
$tab1= array("Paris","Lyon","Marseille");
$tab2 = array("Nantes","Orléans","Tours","Paris");
$tab = array_merge($tab1,$tab2);
echo "array_merge donne: ";
print_r($tab);
echo "<hr />";
?>
104
Fusion de tableaux
• La fonction array_intersect($tab1,$tab2)
– retourne un tableau contenant tous les
éléments communs aux tableaux $tab1 et
$tab2.
– Les indices associés aux valeurs du tableau
retourné comme résultat correspondent à ceux
du tableau passé en premier paramètre.
105
Fusion de tableaux
• la fonction array_diff($tab1,$tab2)
– retourne un tableau contenant les éléments
présents dans le premier paramètre mais pas
dans le second.
– Comme pour la soustraction de nombres, il est
logique que l’inversion des paramètres ne
fournisse pas le même résultat.
– Les indices associés aux valeurs dans les tableaux
d’origine sont conservés.
106
Fusion de tableaux
• Exemple:
<?php
$tab1=array("Blanc","Jaune","Rouge","Vert","Bleu","Noir");
$tab2=array("Bleu","Rouge","Violet","Noir","Jaune","Orange");
echo "Intersection de $tab1 et $tab2 : ";
$tab3=array_intersect($tab1,$tab2);
print_r($tab3);
echo"<br />";
echo "Intersection de $tab2 et $tab1 : ";
$tab4= array_intersect($tab2,$tab1);
print_r($tab4);
echo"<hr />";
$tab5= array_diff($tab1,$tab2);
echo "Différence de $tab1 et $tab2 : ";
print_r($tab5);
echo"<br />";
$tab6= array_diff($tab2,$tab1);
echo "Différence de $tab2 et $tab1 : ";
print_r($tab6);
echo"<br />";
?>
107
LES FONCTIONS
108
Les fonctions
• Une fonction correspond à une série
cohérente d’instructions qui ont été créées
pour effectuer une tâche précise.
• On distingue entre:
– Les fonctions internes ou prêtes à l’emploi;
– Les fonctions définies par l’utilisateur;
• la fonction interne gettype() a pour rôle de
renvoyer le type d’une variable.
109
Les fonctions
• Définir une fonction
– Commencez par définir l’en-tête de la fonction à l’aide du
mot-clé function suivi du nom de la fonction et de
parenthèses.
– Les parenthèses qui suivent le nom de la fonction peuvent
contenir différents paramètres .
– Ouvrez un bloc de code limité par des accolades
contenant l’ensemble du code de définition de la
fonction.
– Si la fonction doit retourner une valeur, il faut faire
précéder la variable ou l’expression qui contient cette
valeur du mot-clé return.
110
Les fonctions
• Structure générale :
function mafonction($x, $y,...)
{
//code de définition de la fonction
return $var;
}
• Il est préférable de définir les fonctions en début de script,
• il est préférable de les inclure dès le début du script qui les
utilise, et ce au moyen de l’instruction include() ou
require().
111
Les fonctions
• Typage et valeur par défaut:
– Il est possible de définir un typage des paramètres
et de la valeur de retour d’une fonction.
– Les types qu’on peut exiger sont int, float, string,
bool, array, un nom de classe et d’interface.
– vous pouvez donner des valeurs par défaut aux
paramètres de la fonction. Il suffit pour cela
d’affecter une valeur au paramètre dans la
définition de la fonction
112
Les fonctions
• Exemple:
<?php
function somme( int $a, int $b) : float
{ return $a+$b; }
echo somme(5, 9);
echo somme('5.4', 9.7);
//Pas de problème, retourne 14
/*5.4 et 9.7 sont convertis en
entiers 5 et 9 donc retourne 14*/
/*La chaîne '5.4' est convertie en
entier 5 donc affiche 14 */
/* FALSE est évalué à 0 donc
affiche 5*/
/ * TRUE est évalué à 1 donc
affiche 6*/
echo somme('5.4', 9);
echo somme(5.4, FALSE);
echo somme(5.4, TRUE);
?>
113
Les fonctions
• Les types ne sont pas nécessairement les
mêmes dans la définition d’une fonction, il y
aura donc un transtypage.
• En typage strict, la fonction va exiger le strict
respect du type de chaque paramètre défini
dans la fonction, sinon il se produit une erreur.
• Pour choisir le typage strict, il faut placer une
directive en tête du fichier qui contient la
définition de la fonction, sous la forme :
declare(strict_types=1);
doit surtout être présente principalement sur le
fichier PHP appelant
Les fonctions
• Passer des arguments par référence
– Si on veut que une fonctions puissent modifier la valeur des variables
qu’on leur passe en argument, il va falloir passer ces arguments par
référence.
– Pour cela, il suffit d’ajouter le signe & devant le paramètre en question
dans la définition de la liste des paramètres de la fonction.
<?php
$a=10; $b=20;
echo 'Avant l'echange <br>';
Echo "$a=$a "," $b=$b".'<br>';
function echange(&$var1, &$var2)
{ $var3= $var1; $var1=$var2 ;
echo '<br> Apres l'echange ';
echange($a,$b);
Echo "<br>$a=$a " ," $b=$b";
$var2=$var3; }
?>
10:48 107
11
4
115
Les fonctions particulières
• La fonction:
– integer func_num_args():
func_num_args() s’utilise sans argument et seulement dans
le corps même d’une fonction. Elle retourne le nombre
d’arguments passés à cette fonction.
– divers func_get_arg (integer $N)
retourne la valeur du paramètre passé à la position $N. le
premier paramètre a l’indice 0.
– array func_get_args()
s’utilise sans paramètre et retourne un tableau indicé
contenant tous les paramètres passés à la fonction .
116
Les fonctions particulières
• Exemple:
<?php
// Utilisation de func_num_args() et func_get_arg()
function somme()
{ $som =0;
// Détermine le nombre d'arguments
$n=func_num_args();
for($i=0;$i<$n;$i++)
{ echo func_get_arg($i);
($i==$n-1)?print(" = "):print(" + ");
$som +=func_get_arg($i); }
return $som;
}
// Appels de la fonction somme()
echo " somme des nombres :", somme(5,6,7,8,11,15),"<br />";
$a=3;$b=5;$c=7;$d=9;
echo" somme de ",somme($a,$b,$c,$d),"<hr />";
?>
117
Les fonctions
• L’opérateur …
– Pour définir des fonctions qui accepte un nombre variable
d’arguments, il suffit d’ajouter l’opérateur … avant la liste
des paramètres dans la définition de la fonction .
– Exemple :
<?php
function prod(...$tab)
{$a =1;
foreach($tab as $nb)
$a *=$nb;
return $a;
}
echo "Produit ", prod(2,3,5,7), "<br>"
?>
118
Les fonctions
• L’instruction yield permet de retourner plusieurs valeurs et de les
lire via une boucle foreach comme s’il s’agissait d’un tableau.
• yield a l’avantage de consommer beaucoup moins de mémoire sur
le serveur .
• Exemple:
<?php
function suite($min,$max,$pas)
{
for($i=$min;$i<=$max;$i+=$pas)
{ yield $i; }
}
echo "Suite : ";
foreach(suite(13, 50,5)as $nb)
{echo $nb, " /// ";}
?>
119
Les fonctions
• les variables peuvent avoir deux portées
différentes : soit une portée globale, soit une
portée locale.
• Toute variable définie en dehors d’une fonction a
une portée globale. Elle est accessible
globalement sauf dans les espaces locaux d’un
script.
• Une variable définie à l’intérieur d’une fonction
va avoir une portée locale à cette fonction, elle
sera détruite dès la fin de l’exécution de la
fonction.
120
Les fonctions
• Pour accéder à une variable de portée globale depuis un espace
local, on utilise le mot clef global avant la déclaration des variables
qu’on souhaite utiliser dans notre fonction.
• Exemple
<?php
$x = 10;
function portee(){
global $x;
echo 'La valeur de $x globale est : ' .$x. '<br>';
$x = $x + 5; //On ajoute 5 à la valeur de $x
}
portee();
echo '$x contient maintenant : ' .$x;
?>
• La valeur de $x globale est : 10
$x contient maintenant : 15
121
Les fonctions
• Pour conserver la valeur finale d’une variable locale pour
pouvoir s’en resservir lors d’un prochain appel à la fonction,
nous utilisons le mot clef static devant la déclaration initiale
de la variable.
• Exemple:
<?php
function compteur(){ static $x = 0;
echo '$x contient la valeur : ' .$x. '<br>';
$x++;}
compteur();
compteur();
compteur();
compteur();
compteur();
?>
$x contient la valeur : 0
$x contient la valeur : 1
$x contient la valeur : 2
$x contient la valeur : 3
$x contient la valeur : 4
122
Les fonctions
• Créer ou définir une constante
– Pour définir une constante en PHP, nous allons
pouvoir utiliser la fonction define() ou le mot
clef const.
– A la différence des variables, nous ne devrons pas
préfixer le nom d’une constante avec le signe $.
• Exemple:
<?php
define('DIX', 10); // ou bien const DIX=10;
echo 'La constante DIX stocke la valeur ' .DIX;
?>
La constante DIX stocke la valeur 10
123
Les fonctions
• Les constantes magiques se distinguent des
autres puisque leur valeur va changer en
fonction de l’endroit dans le script où elles
vont être utilisées.
• Les constantes magiques sont reconnaissables
par le fait que leur nom commence par deux
underscores et se termine de la même
manière.
124
Les fonctions
Nom de la constante Description
FILE Contient le chemin complet et le nom du fichier
DIR Contient le nom du dossier dans lequel est le fichier
LINE Contient le numéro de la ligne courante dans le fichier
FUNCTION
Contient le nom de la fonction actuellement définie ou
{closure} pour les fonctions anonymes
CLASS Contient le nom de la classe actuellement définie
METHOD Contient le nom de la méthode actuellement utilisée
NAMESPACE
Contient le nom de l’espace de noms (« namespace »)
courant
TRAIT
Contient le nom du trait (incluant le nom de l’espace
de noms dans lequel il a été déclaré)
ClassName::class Contient le nom entièrement qualifié de la classe
Les fonctions
• Exemple :
<?php
//Affiche le numéro de la ligne où la constante a été appelée (dans le code)
echo 'Numéro de ligne : ' . LINE . '<br>';
//Affiche le chemin du ficher et son nom
echo 'Chemin complet du fichier : ' . FILE . '<br>';
//Affiche le nom du dossier qui contient le fichier
echo 'Dossier contenant le fichier : ' . DIR . '<br>';
//Affiche à nouveau la ligne où la constante a été appelée
echo 'Numéro de ligne : ' . LINE . '<br>';
//Renvoie le nom de la fonction depuis laquelle la constante est appelée
function test(){
echo 'Constante appelée depuis la fonction ' . FUNCTION ;
}
test();
?>
10:48
Numéro de ligne : 3
Chemin complet du fichier :
C:wampwwwPROJETformat.php
Dossier contenant le fichier : C:wampwwwPROJET
Numéro de ligne : 9
Constante appelée depuis la fonction test 118
12
5
126
LA DATE EN PHP
127
La date en PHP
• Le Timestamp UNIX
Le format Timestamp UNIX est un format de mesure de date
très utilisé en programmation. Le Timestamp UNIX représente
le nombre de secondes écoulées depuis le 1er janvier 1970 à
minuit (heure GMT) et jusqu’à une date donnée.
• Pour obtenir le Timestamp actuel en PHP, nous allons
utiliser la fonction time().
• Exemple:
<?php
echo 'Timestamp actuel : ' .time(). '<br>';
?>
128
La date en PHP
• Pour obtenir le Timestamp UNIX lié à une date donnée, nous
allons pouvoir utiliser:
– la fonction mktime() qui retourne le Timestamp UNIX d’une date,
– la fonction gmmktime() qui retourne le Timestamp UNIX d’une
date GMT.
– mktime (heure, minute, seconde, mois, jour, année) nécessite
une série de nombres en arguments:
1) L’heure ;
2) Les minutes ;
3) Les secondes ;
4) Le jour ;
5) Le mois ;
6) L’année.
– tous les arguments manquants sont utilisés avec la valeur
courante de l'heure et du jour.
129
La date en PHP
• Exemple:
<?php
$t1 = mktime(8, 30, 0, 1, 25, 2021);
$gmt1 = gmmktime(8, 30, 0, 1, 25, 2021);
Echo $t1. '<br>';
Echo $gmt1. '<br>';
?>
130
La date en PHP
• la fonction strtotime() transforme une chaine de caractères de
format date ou temps en Timestamp.
• Exemple:
<?php
$stt1 = strtotime('2021/05/4 08:30:00');
$stt2 = strtotime('2021/05/4');
$stt3 = strtotime('next friday');
$stt4 = strtotime('2 days ago');
$stt5 = strtotime('+1 day');
echo $stt1,'<br>';
echo $stt2,'<br>';
echo $stt3,'<br>';
echo $stt4,'<br>';
echo $stt5,'<br>';
?>
1620117000
1620086400
1620345600
1619995384
1620254584
La date en PHP
• Pour obtenir une date , on utilise la fonction getdate(). Elle
accepte un Timestamp en argument et retourner le tableau
associatif suivants:
10:4
8
12
4
Clef Valeur associée
seconds Les secondes
minutes Les minutes
hours L’heure
mday Le numéro du jour dans le mois
wday Le numéro du jour de la semaine (dimanche = 0, lundi = 1, samedi = 6 pour nous)
mon Le numéro du mois (de 1 à 12)
year L’année complète
yday Le jour de l’année
weekday Le jour de la semaine sous forme de texte (en anglais)
month Le mois de l’année écrit en toutes lettres (en anglais)
0 Le Timestamp relative à la date renvoyée 13
1
125
La date en PHP
• Exemple :
<?php
$tab=getdate();
echo "<br> On est le ". $tab['mday']. '/'.$tab['mon'].
'/'. $tab['year']. ", il est ".$tab["hours"]. " heures
".$tab["minutes"]." minutes ".$tab["seconds"]."
seconds.";
?>
On est le 4/5/2021, il est 23 heures 7 minutes 5 seconds.
13
2
127
La date en PHP
• La fonction date() permet d’obtenir une date selon le
format de notre choix.
• Le tableau suivant donne les caractères les plus
couramment utilisés pour formater une date:
Caractère Signification
d Représente le jour du mois en deux chiffres (entre 01 et 31)
j Représente le jour du mois en chiffres sans le zéro initial (de 1 à 31)
D Représente le jour de la semaine en 3 lettres (en anglais)
l Représente le jour de la semaine en toutes lettres (en anglais)
N
Représente le jour de la semaine en chiffre au format ISO-8601 (lundi =
1, dimanche = 7)
128
La date en PHP
Caractère Signification
w Représente le jour de la semaine en chiffre (dimanche = 0, samedi = 6)
z Représente le jour de l’année de 0 (1er janvier) à 365
W
Représente le numéro de la semaine au format ISO-8601 (les semaines
commencent le lundi)
m Représente le mois de l’année en chiffres avec le zéro initial (de 01 à 12)
n Représente le mois de l’année de chiffres sans le zéro initial (de 1 à 12)
M Représente le mois en trois lettres en anglais (Jan, Feb…)
F Représente le mois en toutes lettres en anglais
t Représente le nombre de jours contenus dans le mois (de 28 à 31)
Y Représente l’année sur 4 chiffres (ex : 2019)
y Représente l’année sur 2 chiffres (ex : 19 pour 2019)
129
La date en PHP
Caractère Signification
L Renvoie 1 si l’année est bissextile, 0 sinon
a et A
Ajoute « am » ou « pm » (pour a) ou « AM » ou « PM » (pour A)
à la date
h Représente l’heure au format 12h avec le zéro initial
g Représente l’heure au format 12h sans zéro initial
H Représente l’heure au format 24h avec le zéro initial
G Représente l’heure au format 24h sans le zéro initial
i Représente les minutes avec le zéro initial
s Représente les seconds avec le zéro initial
130
La date en PHP
Caractère Signification
v Représente les millisecondes avec le zéro initial
O et P
Indique la différence d’heures avec l’heure GMT sans
deux points (pour O, ex : +0100) ou avec deux points
(pour P, ex : +01:00)
I (i majuscule) Renvoie 1 si l’heure d’été est activée, 0 sinon
c
Représente la date complète au format ISO 8601 (ex :
2019-01-25T12:00:00+01:00)
r
Représente la date complète au format RFC 2822 (ex :
Fri, 25 Jan 2019 12 :00 :00 +0100)
Z
Représente le décalage horaire en secondes par
rapport à l’heure GMT
131
La date en PHP
• Exemple:
<?php
echo date('d/m/Y'). '<br>';
echo date('l d m Y h:i:s'). '<br>';
echo date('c'). '<br>';
echo date('r'). '<br>';
?>
04/05/2021
Tuesday 04 05 2021 11:28:35
2021-05-04T23:28:35+00:00
Tue, 04 May 2021 23:28:35 +0000
132
La date en PHP
• Transformer une date en français
– Pour transformer une date en anglais vers du français,
nous utilisons les fonctions setlocale() et strftime().
– Nous allons passer à cette fonction des caractères qui
vont représenter des parties de date:
Caractère Signification
%a Représente le jour de la semaine en trois lettres en anglais
%A Représente le jour de la semaine en toutes lettres en anglais
%u
Représente le jour de la semaine en chiffre au format ISO-8601 (lundi
1, dimanche = 7)
%w Représente le jour de la semaine en chiffre (dimanche = 0, samedi = 6)
%d Représente le jour du mois en deux chiffres (entre 01 et 31)
133
La date en PHP
Caractère Signification
%j Représente le jour de l’année avec les zéros de 001 à 366
%U
Représente le numéro de la semaine de l’année en ne comptant que les semaines
pleines
%V
Représente le numéro de la semaine de l’année en suivant la norme ISO-8601 (si au
moins 4 jours d’une semaine se situent dans l’année alors la semaine compte)
%m Représente le mois sur deux chiffres de 01 à 12
%b Représente le nom du mois en lettres en abrégé
%B Représente le nom complet du mois
%y Représente l’année sur deux chiffres
%Y Représente l’année sur 4 chiffres
%H Représente l’heure, de 00 à 23
134
La date en PHP
Caractère Signification
%k Représente l’heure de 0 à 23
%I (i
majuscule)
Représente l’heure de 01 à 12
%M Représente les minutes de 00 à 59
%S Représente les secondes de 00 à 59
%T Identique à %H:%M:%S
%D Identique à %m/%d/%y
%x
Représente la date sans l’heure au format préféré en se
basant sur la constant locale
%c Affiche la date et l’heure basées sur la constant locale
La date en PHP
10:48 135
Exemple:
<?php
echo strftime('%A %d %B %Y %I:%M:%S'). '<br>';
setlocale(LC_TIME, ['fr', 'fra', 'fr_FR']);
echo strftime('%A %d %B %Y %I:%M:%S'). '<br>';
echo strftime('%x'). '<br>';
echo strftime('%c'). '<br>';
?>
Tuesday 04 May 2021 06:23:3
mardi 04 mai 2021 06:23:30
04/05/2021
04/05/2021 18:23:30 14
1
136
La date en PHP
• Pour comparer des dates, nous allons privilégier la comparaison des
Timestamp liés aux dates.
• On procède en deux étapes :
– on va commencer par récupérer les Timestamp liés aux dates.
– puis on va comparer les Timestamp.
• Exemple:
<?php
$d1 = '25-01-2019'; $tmstp1 = strtotime($d1);
$d2 = '30-June 2018'; $tmstp2 = strtotime($d2);
if($tmstp1 < $tmstp2){echo 'Le ' .$d1. ' est avant le ' .$d2; }
elseif($tmstp1 == $tmstp2)
{ echo 'Les deux dates sont les mêmes'; }
else{ echo 'Le ' .$d2. ' est avant le ' .$d1; }
?>
Le 30-June 2018 est avant le 25-01-2019
137
La date en PHP
• Pour vérifier la validité d’une date PHP, on
utilise la fonction checkdate() qui va accepter
trois chiffres en arguments :
– le premier représente le mois
– le deuxième représente le jour
– le troisième représente l’année.
• Si checkdate() valide la date passée, alors elle
renverra le booléen true. Dans le cas
contraire, elle renverra false.
138
La date en PHP
Tester la validité d’une date
<?php
if(checkdate(1,25,2019))
{ echo 'Le 25 janvier 2019 est une date valide <br>';}
if(checkdate(1,35,2019))
{ echo 'Le 35 janvier 2019 est une date valide <br>'; }
if(checkdate(2,29,2015))
{ echo 'Le 29 février 2015 est une date valide <br>'; }
if(checkdate(2,29,2016))
{ echo 'Le 29 février 2016 est une date valide <br>'; }
?>
La date en PHP
• Validité d’un format de date locale
– La fonction strptime() retourne false en cas d’erreur sur
la date, sinon renvoie un tableau de la forme suivante :
10:4
8
13
9
Type de données Signification
tm_sec Représente les secondes
tm_min Représente les minutes
tm_hour Représente l’heure de 0 à 23
tm_mday Le jour du mois en chiffres sans le zéro initial
tm_mon Représente le mois sous forme de chiffres (janvier = 0, décembre = 11)
tm_year Le nombre d’années écoulées depuis 1900
tm_wday Le numéro du jour de la semaine (Dimanche = 0, Samedi= 6)
tm_yday Le jour de l’année en chiffres (1er janvier = 0)
unparsed La partie de la date qui n’a pas été reconnue 14
5
Exercices
• Exercice 1
Calculez votre âge à l’instant en cours à la
seconde près.
• Exercice 2
Vérifiez si la date du 29 février 1962 a existé.
• Exercice 3
Quel jour de la semaine était le 3 mars 1993 ?
Affichez le résultat en français.
10:48 140
14
6
PHP ORIENTÉ OBJET
14
7
PHP orienté objet
• Classes, propriétés et méthodes:
<?php
class Utilisateur {
Public $username;
Public $password;
public function getNom(){return $this->username;}
public function setNom($name){ $this->username = $name;}
public function setPasse($pass){$this->password= $pass;}
}
?>
• Les variables créées dans les classes sont appelées des
propriétés,
• Les fonctions définies à l’intérieur d’une classe sont
appelées des méthodes,
• Les méthodes permettent d’obtenir ou de mettre à jour les
valeurs de nos propriétés, 14
8
PHP orienté objet
• Le mot clef public signifie qu’on va pouvoir accéder à nos
propriétés depuis l’intérieur et l’extérieur de notre classe.
• La pseudo-variable $this dans le code de notre méthode
sert à faire référence à l’objet couramment utilisé.
• Créons un objet $Adam à partir de la classe Utilisateur puis
définissons ensuite des valeurs spécifiques pour les
propriétés $username et $password pour cet objet.
<?php
$Adam = new Utilisateur();
$ Adam ->setNom(‘Adam');
$ Adam ->setPasse(123);
echo $Adam->getNom(). '<br>';
?>
14
9
PHP orienté objet
• On se sert de la même classe pour instancier
plusieurs d’objets.
• Les objets vont partager les propriétés et
méthodes définies dans la classe qu’on va
pouvoir utiliser de manière indépendante avec
chaque objet.
15
0
Constructeur et destructeur
• Le constructeur d’une classe est une méthode qui va être appelée
automatiquement à chaque fois qu’on va instancier une classe.
• Le constructeur nous permet d’initialiser des propriétés dès la création
d’un objet,
• La méthode destructeur va permettre de nettoyer les ressources avant
que PHP ne libère l’objet de la mémoire,
• Le destructeur va être appelée automatiquement par le PHP juste avant
qu’un objet ne soit détruit.
<?php
class Utilisateur{
protected $username;
protected $password;
public function construct($n, $p){ $this->username = $n; $this->password = $p; }
public function destruct(){ /*Du code à exécuter*/ }
public function getNom(){ return $this->username; }
}
$Adam= new Utilisateur(‘Adam', 123);
echo $Adam->getNom(). '<br>';
?>
15
1
Le principe d’encapsulation
• L’encapsulation correspond au groupement des données
(propriétés) et des méthodes permettant de les manipuler
au sein d’une classe.
• L’encapsulation permet d’empêcher que certaines propriétés
ne soient manipulées depuis l’extérieur de la classe.
• Pour définir qui va pouvoir accéder aux différentes
propriétés et méthodes de nos classes, nous allons utiliser
des niveaux de visibilité qui vont être représentés par les
mots clefs :
– public,
– Private,
– protected.
15
2
Accessibilité des propriétés et des méthodes
• public: Permet l’accès universel à la propriété,
aussi bien dans la classe que dans tout le script,
y compris pour les classes dérivées
• Protected: La propriété n’est accessible que dans
la classe qui l’a créée et dans ses classes dérivées,
• Private: C’est l’option la plus stricte : l’accès à la
propriété n’est possible que dans la classe et
nulle part ailleurs.
15
3
Classes étendues et héritage
• Une classe « fille » hérite de toutes les propriétés et
méthodes de son «parent »,
• Elle peut définir de nouvelles propriétés et méthodes
spécifiques à lui.
• Par exemple, la classe Admin va étendre la classe
Utilisateur précédente, elle rajoute une propriété $ban
qui va contenir la liste des utilisateurs bannis ainsi que
deux méthodes setBan() et getBan().
• La classe Admin peut accéder à toutes les méthodes et
aux propriétés de la classe Utilisateur qui n’ont pas été
définies avec le mot clef private.
15
4
Classes étendues et héritage
• Exemple:
<?php
class Admin extends Utilisateur{
protected $ban;
public function setBan($b){
public function getBan(){
$this->ban[] .= $b; }
echo 'Utilisateurs bannis par '.$this->username. ' : ';
foreach($this->ban as $valeur){ echo $valeur .', '; }
}
}
$Adam = new Admin(‘Adam', 123);
$mathilde = new Utilisateur('Mathilde', ‘abc’);
echo $Adam->getNom(). '<br>';
echo $mathilde->getNom(). '<br>';
$Adam->setBan('Paul');
$Adam->setBan('Jean');
echo $Adam->getBan();
?>
15
5
La surcharge de propriétés et de
méthodes
• On dit qu’on « surcharge » une propriété ou une
méthode d’une classe mère lorsqu’on la redéfinit dans
une classe fille.
• Pour surcharger une propriété ou une méthode, il va
falloir la redéclarer en utilisant le même nom, il faudra
également que la nouvelle définition possède le même
nombre de paramètres.
• Par exemple, on surcharge la méthode getNom() de
notre classe parent Utilisateur dans notre classe
étendue Admin.
15
6
La surcharge de propriétés et de méthodes
• La méthode getNom() est redéfinit dans la classe fille,
<?php
class Admin extends Utilisateur{
protected $ban;
public function getNom(){
return strtoupper($this->username); }
public function setBan($b){ $this->ban[] .= $b; }
public function getBan(){
echo 'Utilisateurs bannis par '.$this->user_name. ' : ';
foreach($this->ban as $valeur){ echo $valeur .', '; }
}
}
?>
15
7
Propriété et méthode statiques
• Une propriété ou une méthode statique est une propriété
ou une méthode qui ne va pas appartenir à une instance de
classe mais qui va appartenir à la classe dans laquelle elle a
été définie,
• Les méthodes et propriétés statiques vont donc avoir la
même définition et la même valeur pour toutes les
instances d’une classe,
• Nous allons pouvoir accéder à ces éléments sans avoir
besoin d’instancier la classe,
• L’accès à une propriété statique depuis un objet n’est
possible que par méthode statique.
15
8
Propriété et méthode statiques
• Exemple: classe Utilisateur
<?php
class Utilisateur{
protected $username; protected $user_region;
protected $prix_abo; protected $password;
/*si vous utilisez une version PHP < PHP 7.1, ce code ne fonctionnera pas*/
public const ABONNEMENT = 15;
public function construct($n, $p, $r){
$this->username = $n; $this->password = $p; $this->user_region = $r; }
public function destruct(){ /*Du code à exécuter */}
public function getNom(){ echo $this->username; }
public function setPrixAbo(){
/*On calcule un prix d'abonnement différent selon les profils des
utilisateurs*/
if($this->user_region === 'Sud')
{ return $this->prix_abo = self::ABONNEMENT / 2; }
else{ return $this->prix_abo = self::ABONNEMENT; } }
public function getPrixAbo(){ echo $this->prix_abo; } }
?>
15
9
Propriété et méthode statiques
• Exemple: classe Admin
<?php
class Admin extends Utilisateur{
protected static $ban;
public const ABONNEMENT = 5;
public function construct($n, $p, $r){
$this->username = strtoupper($n); $this->password = $p; $this->user_region = $r;
}
public function setBan($b){ self::$ban[] .= $b; }
public function getBan(){
echo 'Utilisateurs bannis : ';
foreach (self::$ban as $valeur){ echo $valeur .', ';}
}
public function setPrixAbo(){
if($this->user_region === 'Sud'){return $this->prix_abo = self::ABONNEMENT;}
else{return $this->prix_abo = parent::ABONNEMENT / 2;}
}
}
?>
16
0
155
Propriété et méthode statiques
• Exemple:
<?php
require 'utilisateur.php';
require 'admin.php';
$Adam = new Admin(‘Adam', 'abcdef', 'Sud');
$mathilde = new Admin('Math', 123456, 'Nord');
$florian = new Utilisateur('Flo', 'flotri', 'Est');
$Adam->setBan('Paul');
$mathilde->setBan('Thomas');
$Adam->getBan();
echo '<br>';
$mathilde->getBan();
?>
156
Les classes et méthodes abstraites
• Une classe abstraite est une classe qui ne va pas
pouvoir être instanciée directement,
• Une méthode abstraite est une méthode dont seule la
signature (le nom et les paramètres) est déclarée,
• Dès qu’une classe possède une méthode abstraite, il va
falloir la déclarer comme classes abstraite,
• Lors de l’héritage d’une classe abstraite, les méthodes
déclarées comme abstraites dans la classe parent
doivent obligatoirement être définies dans la classe
enfant avec des signatures correspondantes.
157
Les classes et méthodes abstraites
• Classe abstraite
<?php
abstract class Utilisateur{
protected $username;
protected $user_region;
protected $prix_abo;
protected $password;
public const ABONNEMENT = 15;
public function destruct(){ /*Du code à exécuter*/ }
abstract public function setPrixAbo();
public function getNom(){
public function getPrixAbo(){
echo $this->user_name; }
echo $this->prix_abo; }
}
?>
158
Étendre des classes abstraites
• Classe Admin
<?php
class Admin extends Utilisateur{
protected static $ban;
public function construct($n, $p, $r){
$this->username = strtoupper($n);
$this->password= $p;$this->user_region = $r; }
public function setBan($b){self::$ban[] .= $b; }
public function getBan(){ echo 'Utilisateurs bannis : ';
foreach( self::$ban as $valeur){ echo $valeur .', '; } }
public function setPrixAbo(){
if($this->user_region === 'Sud'){
return $this->prix_abo = parent::ABONNEMENT / 6;
}else{return $this->prix_abo = parent::ABONNEMENT / 3;}
} }
?>
159
Étendre des classes abstraites
• Classe Abonne
<?php
class Abonne extends Utilisateur{
public function construct($n, $p, $r){
$this->username = $n;
$this->password = $p;
$this->user_region = $r;
}
public function setPrixAbo(){
if($this->user_region === 'Sud'){
return $this->prix_abo = parent::ABONNEMENT / 2;
}else{
return $this->prix_abo = parent::ABONNEMENT;}
}
}
?>
Étendre des classes abstraites
Exemple
<?php
require 'utilisateur.php';
require 'admin.php';
require 'abonne.php';
$Adam = new Admin(‘Adam', 123, 'Sud');
$florian = new Abonne('Flo', 'flotri', 'Est');
$Adam->setPrixAbo();
$florian->setPrixAbo();
echo 'Prix de l'abonnement pour ';
$Adam->getNom();
echo ' : ';
$Adam->getPrixAbo();
echo '<br>Prix de l'abonnement pour ';
$florian->getNom();
echo ' : ';
$florian->getPrixAbo();
?>
10:48 160
16
6
161
Les interfaces
• Les interfaces ont un but similaire aux classes
abstraites,
• L’un des intérêts principaux liés à la définition d’une
interface est de fournir un plan général pour les
développeurs ,
• Les développeurs vont implémenter l’interface et
doivent suivre le plan donné par l’interface,
• Une interface doit être implémenter, c’est-à-dire créer
des classes dérivées à partir de celle-ci.
162
Les interfaces
Les deux différences majeures entre les interfaces
et les classes abstraites sont les suivantes :
1. Une interface ne peut contenir que les signatures
des méthodes ainsi qu’éventuellement des
constantes mais pas de propriétés. Cela est dû au
fait qu’aucune implémentation n’est faite dans une
interface : une interface n’est véritablement qu’un
plan ;
2. Une classe ne peut pas étendre plusieurs classes à
cause des problèmes d’héritage. En revanche, une
classe peut tout à fait implémenter plusieurs
interfaces.
163
Les interfaces
• Définir et implémenter une interface
– On définit une interface de la même manière qu’une
classe mais en utilisant interface à la place de class.
– Interface Utilisateur:
<?php
interface Utilisateur{
public const ABONNEMENT = 15;
public function getNom();
public function setPrixAbo();
public function getPrixAbo();
}
?>
164
Les interfaces
• On implémente une interface de la même
manière que lors de la création d’une classe
étendue mais cette fois-ci on utilise le mot
clef implements à la place de extends.
• pour accéder à une constante d’interface, il
faut préciser le nom de l’interface devant
l’opérateur de résolution de portée.
165
Les interfaces
• Classe Abonne:
<?php
class Abonne implements Utilisateur{
protected $username;
protected $user_region;
protected $prix_abo;
protected $password;
public function construct($n, $p, $r){
$this->username = $n; $this->password = $p; $this->user_region = $r; }
public function getNom(){ echo $this->user_name; }
public function getPrixAbo(){ echo $this->prix_abo; }
public function setPrixAbo(){
if($this->user_region === 'Sud'){
return $this->prix_abo = Utilisateur::ABONNEMENT/2;
}else{ return $this->prix_abo = Utilisateur::ABONNEMENT; }
} }
?>
166
Les interfaces
• Classe Admin:
<?php
class Admin implements Utilisateur{
protected $username;
protected $user_region;
protected $prix_abo;
protected $password;
protected static $ban;
public function construct($n, $p, $r){
$this->useename = strtoupper($n); $this->password = $p; $this->user_region = $r; }
public function getNom(){ echo $this->username; }
public function getPrixAbo(){ echo $this->prix_abo; }
public function setBan($b){ self::$ban[] .= $b; }
public function getBan(){ echo 'Utilisateurs bannis : ';
foreach(self::$ban as $valeur){ echo $valeur .', '; } }
public function setPrixAbo(){
if($this->user_region === 'Sud'){ return $this->prix_abo = Utilisateur::ABONNEMENT / 6;
}else{ return $this->prix_abo = Utilisateur::ABONNEMENT/ 3; }
} }
?>
167
Les interfaces
• Exemple d’utilisation:
<?php
require 'utilisateur.php';
require 'admin.php';
require 'abonne.php';
$Adam = new Admin(‘Adam', 'abc', 'Sud');
$florian = new Abonne('Flo', 'flotri', 'Est');
$Adam->setPrixAbo();
$florian->setPrixAbo();
echo 'Prix de l'abonnement pour ';
$Adam->getNom();
echo ' : ';
$Adam->getPrixAbo();
echo '<br>Prix de l'abonnement pour ';
echo ' : ';
echo '<br>Prix de l'abonnement pour ';
$florian->getNom();
echo ' : ';
$florian->getPrixAbo();
?>
168
Les traits
• En PHP, une classe fille ne peut hériter que d’une seule
classe mère.
• Que faire si une classe a besoin d’hériter de plusieurs
classes mères ?
• Les traits sont utilisés pour déclarer les méthodes qui
peuvent être utilisées dans plusieurs classes.
• Ces méthodes peuvent être simple ou abstraites
peuvent avoir n’importe quel modificateur d’accès
(public, private, or protected).
169
Les traits
• Le trait propose plusieurs avantages :
– N’importe quelle classe peut utiliser un trait
– Une classe peut utiliser plusieurs traits
– Un trait peut définir des propriétés
– Un trait peut définir des méthodes abstraites
– Un trait peut définir des variables et méthodes statiques
– Un trait peut utiliser d’autres traits
• Le trait se place entre la classe et l’interface. C’est une
sorte de classe à typage faible et non instanciable.
170
Les traits
• <?php
trait HelloWorld {
public function sayHello() {
echo 'Hello World!';
}
}
class TheWorldIsNotEnough {
use HelloWorld;
public function sayHello() {
echo 'Hello Universe!';
}
}
$o = new TheWorldIsNotEnough();
$o->sayHello();
?>
• L'exemple ci-dessus va afficher :
• Hello Universe!
171
Méthodes et classe final
• Le mot-clé final est utilisé en PHP pour les méthodes et les classes:
– Le mot-clé final pour les méthodes empêche la surcharge des méthodes,
– Le mot-clé final pour les classes empêche l’héritage.
• Méthode finale
On ne peut pas surcharger la méthode de la classe mère.
<?php
class MathClass{
final function calculer($a, $b){
$somme = $a + $b;
echo "La somme de $a et $b est =".$somme;
}
}
class School extends MathClass{
function calculer($x, $y){
$prod = $x * $y;
echo "le produit de $x et $y est =".$prod;
}
}
$obj= new School();
$obj->calculer(2,4);
?>;
172
Parcours d’objets: L’interface Iterator
• Nous allons découvrir l’interface Iterator et
implémenter certaines de ses méthodes.
• Parcourir les propriétés visibles d’un objet en
utilisant une boucle foreach.
173
Parcours d’objets: L’interface Iterator
• Exemple:
class Test{
public $publique1 = 'Variable publique 1';
public $publique2 = 'Variable publique 2';
public $publique3 = 'Variable publique 3';
protected $protegee = 'Variable protégée';
private $privee = 'Variable privée';
}
//Instanciation de la classe
$test = new Test();
//Parcours et affichage des propriétés visibles
foreach ($test as $clef => $valeur){
echo $clef.' => ' .$valeur. '<br>';
}
?>
– Resultat:
Publique1 => Variable publique 1
publique2 => Variable publique 2
Publique3 => Variable publique 3
174
Parcours d’objets: L’interface Iterator
• L’interface Iterator est une interface prédéfinie en PHP.
• Elle définit des méthodes qu’on va pouvoir implémenter
pour itérer des objets en interne:
– La méthode current() ;
– La méthode next() ;
– La méthode rewind() ;
– La méthode key() ;
– La méthode valid().
• vous devez savoir que les fonctions current(), next(),
rewind() et key() existent toutes déjà en tant que fonctions
prédéfinies en PHP. Nous allons donc les utiliser pour
définir l’implémentation de nos méthodes.
Parcours d’objets: L’interface Iterator
public function next(){
$tableau = next($this->tableau);
echo 'Elément suivant : ' .$tableau. '<br>';
return $tableau;
}
public function valid(){
$clef = key($this->tableau);
$tableau = ($clef !== NULL && $clef !== FALSE);
echo 'Valide : ';
var_dump($tableau);
echo '<br>';
return $tableau;
}
}
$tbtest = ['C1' => 'V1', 'C2' => 'V2', 'C3' => 'V3'];
$objet = new Test($tbtest);
foreach ($objet as $c => $v){
echo $c. ' => ' .$v. '<br><br>';
}
?>
• Exemple:
<?php
//Définition d'une classe
class Test implements Iterator{
private $tableau = [];
public function construct(array$tb){
$this->tableau = $tb;
}
public function rewind(){
echo 'Retour au début du tableau<br>';
reset($this->tableau);
}
public function current(){
$tableau = current($this->tableau);
echo 'Elément actuel : ' .$tableau. '<br>';
return $tableau;
}
public function key(){
$tableau = key($this->tableau);
echo 'Clef : ' .$tableau. '<br>';
return $tableau;
}
175
176
Parcours d’objets: L’interface Iterator
• Lorsqu’on utilise une boucle foreach avec un objet qui implémente
l’interface Iterator, le PHP va automatiquement
– Commencer par appeler Iterator::rewind() avant le premier passage
dans la boucle ce qui va dans notre cas affiche le texte « Retour au
début du tableau » et va placer le pointeur interne du tableau au début
de celui-ci.
– Ensuite, avant chaque nouveau passage dans la boucle, Iterator::valid()
est appelée et si false est retourné, on sort de la boucle.
– Dans le cas contraire, Iterator::current() et Iterator::key() sont
appelées.
– Finalement, après chaque passage dans la boucle, Iterator::next() est
appelée et on recommence l’appel aux mêmes méthodes dans le
même ordre (excepté pour rewind() ).
178
Exercices
• Exercice 1
Créez une classe représentant une personne. Elle
doit avoir les propriétés nom, prénom et adresse,
ainsi qu’un constructeur et un destructeur
. Une
méthode getPersonne() doit retourner les
coordonnées complètes de la personne. Une
méthode setAdresse() doit permettre de modifier
l’adresse de la personne. Créez des objets
personne, et utilisez l’ensemble des méthodes.
179
Exercices
• Exercice 2
Créez une classe abstraite représentant une personne.
Elle déclare les propriétés nom et prénom et un
constructeur. Créez une classe client dérivée de la
classe personne en y ajoutant la propriété adresse et
une méthode setCoord() qui affiche les coordonnées
complètes de la personne. Créez une classe électeur
dérivée de la même classe abstraite, et ajoutez-y
deux propriétés bureau_de_vote et vote, ainsi qu’une
méthode avoter(), qui enregistre si une personne a voté
dans la propriété vote.
180
LES VARIABLES SUPERGLOBALES
181
Les variables superglobales
• Les variables superglobales sont des variables un peu
particulières pour trois raisons :
– Elles sont écrites en majuscules et commencent toutes, à une
exception près, par un underscore ( _ ),
– Les variables Superglobales sont des variables prédéfinies
internes et sont toujours disponible,
– Les superglobales sont des array car elles contiennent de
nombreuses informations,
– Ces variables sont automatiquement créées par PHP à chaque
fois qu'une page est chargée.
182
Les variables superglobales
• Les variables superglobales PHP sont les suivantes:
1. $GLOBALS ;
2. $_SERVER ;
3. $_REQUEST ;
4. $_GET ;
5. $_POST ;
6. $_FILES ;
7. $_ENV ;
8. $_COOKIE ;
9. $_SESSION.
183
Les variables superglobales
superglobale Description Exemple d'utilisation
$GLOBALS
Contient toutes les variables disponibles dans un
contexte global
-
$_SERVER
Contient toutes les informations fournies par le
serveur web
Pratique pour connaitre le chemin
du site, d'un dossier, etc.
$_GET
Contient les informations fournies en paramètre au
script via la méthode GET par l'URL et le protocole
HTTP.
Utile pour véhiculer des
informations d'une page à l'autre.
$_POST
Contient les informations fournies par un
formulaire via la méthode POST du protocole HTTP.
Utile pour récupérer les saisies
postées dans un formulaire par un
internaute.
184
Les variables superglobales
superglobale Description Exemple d'utilisation
$_FILES
Contient les informations liées à l'upload d'un (ou
plusieurs) fichier(s) par un formulaire (fonctionne
en complément de la superglobale $_POST).
Utile pour récupérer le(s) fichier(s)
uplaodé(s) dans un formulaire par un
internaute.
$_COOKIE
Contient les informations fournies par les cookies
via le protocole HTTP.
Utile pour conserver des informations
sur un internaute.
$_SESSION Contient les informations de la session en cours.
Utile pour maintenir une connexion
avec un internaute sur un site web
$_REQUEST
Contient les variables fournies au script (peu
importe la méthode utilisée).
Utile pour récupérer des informations
sans savoir précisément d'où elles
proviennent
$_ENV
Contient les variables fournies par
l'environnement.
-
185
La variable superglobale $GLOBALS
• $GLOBALS nous permet d’accéder à des variables
définies dans l’espace global depuis n’importe où
dans le script et notamment depuis un espace
local,
• La variable $GLOBALS est une variable tableau
qui stocke en fait automatiquement toutes les
variables globales déclarées dans le script,
• Ce tableau est un tableau associatif qui contient
les noms des variables créées dans l’espace global
en index et leurs valeurs en valeurs du tableau.
186
La variable superglobale $GLOBALS
• Exemple:
<?php
$prenom = ‘Julia';
$nom = 'Joly';
$age = 20;
//On utilise la superglobale $GLOBALS
function presenter(){
$mail = 'Joly@gmail.com';
echo 'Je suis ' .$GLOBALS['prenom']. ' ' .$GLOBALS['nom']. ',
j'ai'.$GLOBALS['age']. ' ans.<br>Mon adresse mail est : ' .$mail;
}
presenter();
echo '<br><br>';
print_r($GLOBALS);
?>
187
La variable superglobale $_SERVER
• La superglobale $_SERVER contient des
variables définies par le serveur utilisé ainsi
que des informations relatives au script.
• $_SERVER est un tableau associatif dont les
clefs sont les noms des variables qu’elle stocke
et les valeurs sont les valeurs des variables
liées.
188
La variable superglobale $_SERVER
<?php
//Renvoie le nom du fichier contenant le script
echo $_SERVER['PHP_SELF']. '<br>';
//Renvoie le nom du serveur qui héberge le fichier
echo $_SERVER['SERVER_NAME']. '<br>';
//Renvoie l'adresse IP du serveur qui héberge le fichier
echo $_SERVER['SERVER_ADDR']. '<br>';
//Retourne l'IP du visiteur demandant la page
echo $_SERVER['REMOTE_ADDR']. '<br>';
/*Renvoie une valeur non vide si le script a été appelé via le protocole HTTPS*/
echo $_SERVER['HTTPS']. '<br>';
//Retourne le temps Unix du début de la requête
echo $_SERVER['REQUEST_TIME'];
?>
189
La variable superglobale $_REQUEST
• La variable superglobale $_REQUEST va
contenir toutes les variables envoyées via
HTTP GET, HTTP POST et par les cookies HTTP.
• $_REQUEST est un tableau associatif, va ainsi
contenir les variables de $_GET, $_POST et
$_COOKIE.
195
190
La variable superglobale $_ENV
• La superglobale $_ENV va contenir des informations
liées à l’environnement dans lequel s’exécute le script.
• $_ENV est un tableau associatif qui va pouvoir
contenir, par exemple, le nom de l’utilisateur qui
exécute le script si celui-ci est accessible.
• PHP a la fonction getenv() pour récupérer la liste de
toutes les variables d'environnement ou la valeur
d'une variable d'environnement spécifique
<?php
echo $_ENV['USER']. ' exécute actuellement ce script';
?>
19
7
Pour obtenir la valeur d'une variable spécifique, utilisez son nom comme
argument pour la fonction getenv()
La variable superglobale $_ENV
191
La variable superglobale $_FILES
• La superglobale $_FILES va contenir des
informations sur un fichier téléchargé, comme le
type du fichier, sa taille, son nom, etc.
• On pourra donc utiliser cette superglobale
lorsqu’on offre la possibilité à nos utilisateurs de
nous envoyer des fichiers, afin d’obtenir des
informations sur les fichiers envoyés ou même
pour filtrer et interdire l’envoi de certains fichiers.
199
200
192
Les variables superglobales $_GET et $_POST
• Les superglobales $_GET et $_POST vont être utilisées
pour manipuler les informations envoyées via un
formulaire HTML.
• Ces deux superglobales stockent les différentes valeurs
envoyées par un utilisateur via un formulaire selon la
méthode d’envoi :
– $_GET stockera les valeurs lorsque le formulaire sera
envoyé via la méthode GET,
– $_POST stockera les valeurs lorsque le formulaire sera
envoyé via la méthode POST.
193
La variable superglobale $_COOKIE
• La superglobale $_COOKIE est un tableau associatif qui contient
toutes les variables passées via des cookies HTTP.
• Un cookie est un petit fichier texte qui ne peut contenir qu’une
quantité limitée de données.
• Les cookies vont être stockés sur les ordinateurs des visiteurs.
• nous allons utiliser les cookies pour faciliter la vie des utilisateurs en
préenregistrant des données les concernant comme un nom
d’utilisateur par exemple.
• dès qu’un utilisateur connu demande à accéder à une page Web,
les cookies vont également automatiquement être envoyées dans
la requête de l’utilisateur. Cela permet de l’identifier et de lui
proposer une page personnalisée.
194
La variable superglobale $_COOKIE
• Pour créer un cookie en PHP, nous allons
utiliser la fonction setcookie() de la façon
suivante :
– setcookie( name, value, expire, path, domain,
secure, httponly ).
– Ces paramètres ont la signification suivante :
195
La variable superglobale $_COOKIE
Paramètre Signification
name Le nom du cookie.
value
La valeur du cookie. Comme cette valeur est stockée sur l’ordinateur d’un
utilisateur, on évitera de stocker des informations sensibles.
expires
La date d’expiration du cookie sous forme d’un timestamp UNIX. Si aucune
valeur n’est passée en argument, le cookie expirera à la fin de la session
(lorsque le navigateur sera fermé).
path
Le chemin sur le serveur sur lequel le cookie sera disponible. Si la valeur est
‘/’, le cookie sera disponible sur l’ensemble du domaine. Si la valeur est
‘/cours/’, le cookie ne sera disponible que dans le répertoire /cours/ et les
sous-répertoires.
196
La variable superglobale $_COOKIE
Paramètre Signification
domain
Indique le domaine ou le sous domaine pour lequel le cookie est
disponible.
secure
Indique si le cookie doit uniquement être transmis à travers une
connexion sécurisée HTTPS depuis le client. Si la valeur passée
est true, le cookie ne sera envoyé que si la connexion est sécurisée.
httponly
Indique si le cookie ne doit être accessible que par le protocole HTTP.
Pour que le cookie ne soit accessible que par le protocole http, on
indiquera la valeur true. Cela permet d’interdire l’accès au cookie aux
langages de scripts comme le JavaScript par exemple, pour se protéger
potentiellement d’une attaque de type XSS.
197
La variable superglobale $_COOKIE
• Exemple:
<?php
setcookie('user_id', '1234');
setcookie('user_pref', 'dark_theme', time()+3600*24,
'/', '', true, true);
?>
<?php
if(isset($_COOKIE['user_id'])){
echo 'Votre ID de session est le ' .$_COOKIE['user_id'];}
?>
198
Modifier la valeur d’un cookie
• Pour modifier la valeur d’un cookie, on utilise à nouveau la
fonction setcookie() en lui passant le nom du cookie dont on
souhaite changer la valeur et changer l’argument de type
valeur passé à la fonction avec la nouvelle valeur souhaitée.
<?php
//On définit deux cookies
setcookie('user_id', '1234');
setcookie('user_pref', 'dark_theme', time()+3600*24, '/', '', false,false);
//On modifie la valeur du cookie user_id
setcookie('user_id', '5678');
?>
199
supprimer un cookie
• Pour supprimer un cookie, nous utilisons setcookie() en lui
passant le nom du cookie qu’on souhaite supprimer et
définissons cette fois-ci une date d’expiration se situant
dans le passé pour le cookie en question.
<?php
if(isset($_COOKIE['user_id'])){
echo 'Votre ID de session est le ' .$_COOKIE['user_id']. '<br>';}
if(isset($_COOKIE['user_pref'])){
echo 'Votre thème préféré est ' .$_COOKIE['user_pref'];
}else{echo 'Pas de thème préféré défini';}
//On supprime le cookie user_pref
setcookie('user_pref', '', time()-3600, '/', '', false, false);
?>
200
Les sessions
• Qu'est-ce qu'une session ?
– Une session est une période entre un début et une fin
d'une activité
– Par exemple pour Internet,
• j'ouvre mon navigateur sur http://www.php-astux.info et je
referme le navigateur :
– j'ai ainsi réalisé une session que j'ai commencée, puis terminée
– On associe à une session un ensemble de valeurs
définies de manière transparente pour le visiteur et
que le serveur conserve de page en page, comme un
cookie
Les sessions
• Les données d’une session
– Les données d'une session sont stockées sur le serveur et non
chez le client, ce qui l'empêche de pouvoir les modifier
manuellement, comme il peut le faire pour un cookie,
• La durée de vie d'une session
– Le temps d’une navigation
– Elle commence donc lors de l'accès à une page les utilisant et se
termine à la fermeture du navigateur du client
– Une fois la session terminée, elle est détruite ainsi que toutes
les données qu'elle contient
– Elle ne doit donc contenir que des données temporaires
– Cependant, la session possède aussi un délai d'expiration
• Celui-ci peut être modifié dans la configuration du serveur, mais vaut
généralement une trentaine de minutes
• Une fois ce délai dépassé, la session est supprimée
201
21
0
202
Les sessions
• Initialiser une session
– Pour pouvoir utiliser la fonctionnalité de session
de PHP, il faut lancer le moteur de session en
utilisant la fonction
session_start()
– Vous devez placer ce code au tout début de votre
script
<?php
session_start();
?>
203
Les sessions
• Une session portant un nom personnalisé
– Une session porte par défaut le nom "PHPSESSID"
– C'est lui qui sera utilisé comme paramètre GET
dans les liens
– Pour le changer, utiliser la fonction session_name()
<?php
session_name('nom_de_session');
session_start();
?>
204
Les sessions
• Fermer une session
– Une fois le script PHP terminé, les données de la session sont
automatiquement sauvegardée pour le prochain script
– Cependant, durant toute l'exécution du script, le fichier de la
session est verrouillé et aucun autre script ne peut y toucher
– Ils doivent donc attendre que le premier arrive à la fin
– Vous pouvez fermer plus rapidement une session en utilisant la
fonction session_write_close()
– Si vous voulez également détruire la session, vous pouvez
utiliser la fonction session_destroy() couplée à la fonction
session_unset()
205
Les sessions
• Sauvegarder une variable
– Les variables de sessions sont stockées dans le tableau super-global :
$_SESSION
<?php
// Création de la session
session_start();
//Sauvegarde dans la session créée de la variable "prenom"
$_SESSION['prenom'] = ‘Ahmed';
?>
• Récupération de données dans une session
– Quand on démarre une session avec session_start(), le tableau super-
global $_SESSION est automatiquement initialisé avec les variables de la
session
– S'il contenait quelque chose, ce contenu n'est plus disponible après
<?php
echo $_SESSION['prenom'];
?>
206
Les sessions
• Supprimer une variable d'une session
– Utiliser unset() qui prend en paramètre la variable
à détruire
– Exemple
<?php
unset($_SESSION['prenom']);
// La variable de session "prenom" a été supprimée, on
ne peut plus y avoir accès !
?>
207
Les sessions
• Détruire une session
– Utiliser session_destroy() qui ne prend aucun
paramètre et qui renvoie vrai en cas de succès et
faux en cas d'erreur
– Fonctionnement :
<?php
if (session_destroy()) {
echo 'Session détruite !';
} else {
echo 'Erreur : impossible de détruire la session !';
}
?>
208
Les sessions
• Détruire toutes les variables d'une session
– Il est aussi possible de détruire toutes les variables de
session, ce qui permet de conserver votre session :
• il suffit tout simplement de réinitialiser le tableau $_SESSION
<?php
$_SESSION = array(); // $_SESSION est désormais
//un tableau vide, toutes les variables de session ont
//été supprimées
?
209
LES FORMULAIRES
210
Les formulaires
• Tout échange entre visiteur et serveur passe par un
formulaire, dans lequel l’utilisateur peutsaisir des
textes ou mots de passe, opérer des choix grâce à
des boutons radio, des cases à cocher ou deslistes
de sélection, voire envoyer ses propres fichiers depuis
le poste client.
• Il est donc important d’en maîtriser la création à la fois
avec HTML 5, pour obtenir des formulaires
présentables, et avec PHP, pour gérer les informations
fournies par le formulaire au script côté serveur.
211
Création d’un formulaire HTML
• Avant toute chose, il faut créer la structure HTML d’un
formulaire.
<form method="post" action="nom_de_fichier.php">
<fieldset>
<legend>Titre du formulaire</legend>
<!-- Corps du formulaire contenant les différentes composants-->
</fieldset>
</form>
• L’élément <form> possède certains attributs obligatoires
comme L’attribut action="nom_de_fichier.php". Il désigne le
fichier qui va traiter, sur le serveur, les informations saisies
dans le formulaire.
212
Création d’un formulaire HTML
• method="post|get" détermine la méthode d’envoi des données
vers le serveur.
• La méthode get présente l’inconvénient d’ajouter les données du
formulaire à l’adresse URI du fichier qui les traite, ce qui les rend
visibles par le visiteur.
• Cet inconvénient peut être exploité pour passer des données à un
script dès son appel.
• il existe une limite à la longueur des URI et donc à la quantité de
données à transmettre.
• La méthode post ne présente pas ces problèmes, elle est utilisée
dans la plupart des cas.
213
Création d’un formulaire HTML
• name="chaine_de_caractères" attribue un nom au formulaire. Cet
attribut est surtout utilisé pour accéder aux éléments du formulaire
via un script JavaScript.
• enctype="type_d’encodage" détermine le type d’encodage des
données transmises au serveur.
• L ’élément <fieldset> permet de créer des blocs visuels contenus
entre les balises <fieldset> et </fieldset> et donc de structurer
le formulaire en fonction des champs qu’il contient, ce qui
améliore la présentation.
• L ’élément <legend> contient le titre de chacun de ces blocs.
• À l’intérieur de chaque bloc se trouvent les éléments HTML qui
créent les champs visibles ou invisibles du formulaire.
214
Création d’un formulaire HTML
• L’élément <input />
– La balise unique <input /> permet de créer les
composants classiques des formulaires.
– Il possède un certains attribut comme type et name.
Ce dernier est obligatoire car c’est lui qui permet
d’identifier les champs côté serveur,
– l’attribut type peut prendre les valeurs suivantes:
"text", "password", "email", "tel", "date", "number",
"checkbox", "radio", "submit", "reset", "file" et
"hidden".
215
Création d’un formulaire HTML
• L’élément <input type="text" />
– Cet élément crée un champ de saisie de texte d’une
seule ligne.
– En plus de l’attribut name, vous pouvez apporter
des précisions à l’aide des attributs suivants :
• size="nombre". Détermine la largeur de la zone en nombre
de caractères.
• maxlength="nombre". Détermine le nombre maximal de
caractères que l’utilisateur est autorisé à saisir.
• value="texte". Définit un texte par défaut tant que
l’utilisateur ne l’a pas modifié, comme dans l’exemple ci-
dessous :
<input type ="text" name="ville" size="30" maxlength="40"
value="Votre ville"/>
216
Création d’un formulaire HTML
• L’élément <input type="email" />
– Crée un champ de saisie d’adresse e-mail identique à un
champ de texte,
– Les attributs size et maxlength y jouent le même rôle que
précédemment.
– si l’on définit son attribut pattern, qui contient un
motif d’expression régulière, le navigateur vérifie la
validité de la saisie et avertit l’utilisateur en cas d’erreur.
– <input type ="email" name="mail" size="50"
pattern="(^[a-z0-9]+)@([a-z0-9]) +(.)([a-z]{2,4})"/>
217
Création d’un formulaire HTML
• L’élément <input type="tel" />
– Cette balise crée un champ de saisie de
numéro de téléphone,
– On peut également lui ajouter l’attribut pattern
contenant une expression régulière,
– Par exemple:
<input type ="tel" name="tel" pattern="^0[0-9]{9}" />
218
Création d’un formulaire HTML
• L’élément <input type="password" />
– Elle crée un champ de saisie de mot de passe
semblable à un champ texte mais dans lequel les
caractères saisis sont invisibles et remplacés par des
astérisques,
– Les attributs size et maxlength y jouent le même
rôle que précédemment.
– Exemple :
<input type ="password" name="code" size="10" maxlength ="6" />
219
Création d’un formulaire HTML
• L’élément <input type="number" />
– Crée un champ de saisie de nombre,
– on peut définir les attributs min et max afin de créer
un intervalle de valeurs autorisées,
– l’attribut required peut être définit pour rendre une
saisie obligatoire.
– exemple:
<input type="number" name="num" min="1" max="10"
step="2" />
220
Création d’un formulaire HTML
• L’élément <input type="date" />
– Crée un champ de saisie de date au format AAA-MM-JJ.
– En ajoutant les attributs min et max, on peut définir des dates
minimale et maximale.
– Exemple :
<input type ="date" name="ladate" min="2016-09-01" max="2017-
12-31" />
– Ici, la date saisie doit obligatoirement être comprise entre le 1er
septembre 2016 et le 31 décembre 2017.
– Il existe des variantes de ce composant qui permettent de saisir
l’heure, le mois, la semaine ou encore la date et l’heure
simultanément, en remplaçant la valeur de l’attribut type par
time, month, week et datetime respectivement.
221
Création d’un formulaire HTML
• L’élément <input type="radio" />
– Crée un bouton radio. Employé seul, un bouton radio peut
servir à valider des choix.
– Employé en groupe, qu’un seul choix est autorisé, tous les
boutons radio du groupe doivent avoir une même valeur pour
l’attribut "name".
– Le fait d’en activer un désactive celui qui l’était auparavant. L
’attribut checked="checked" définit le bouton coché par
défaut. L ’attribut value joue le même rôle que pour les cases à
cocher et est également indispensable.
– Exemple :
• <label>Femme</label><input type ="radio" name="capa" value=
"Femme" />
• <label>Homme</label><input type ="radio" name="capa" value=
"Homme" />
222
Création d’un formulaire HTML
• L’élément <input type="checkbox" />
– Crée une case à cocher utilisée pour effectuer un ou
plusieurs choix parmi ceux qui sont préétablis par le
programmeur.
– L ’attribut value contient le texte qui sera transmis au
serveur si l’utilisateur coche la case.
– Exemple :
<input type ="checkbox" name="lang[]" value="français" />
<input type ="checkbox" name="lang[]" value="anglais" />
223
Création d’un formulaire HTML
• L’élément <input type="submit" />
– Crée un bouton sur lequel l’utilisateur doit cliquer pour
déclencher l’envoi des données de tout le formulaire
vers le serveur.
– Le clic sur ce bouton est alors analysé par le script
désigné par l’attribut action de l’élément <form>.
– Exemple:
<input type ="submit" value="Envoyer" />
224
Création d’un formulaire HTML
• L’élément <input type="reset" />
– Crée un bouton de réinitialisation du formulaire,
– Exemple :
<input type ="reset" value="Effacer" />
225
Création d’un formulaire HTML
• L’élément <input type="file" />
– Permet le transfert de fichiers du poste client vers le
serveur.
– crée un champ de saisie et un bouton de sélection de
fichier permettant à l’utilisateur de choisir le fichier à
transférer.
– l’attribut accept définit le ou les types de fichier acceptés
en transfert.
– Exemple:
<input type="file" name="monfichier" accept="image/gif,
image/jpeg" size="30"/>
226
Création d’un formulaire HTML
• L’élément <input type="hidden" />
– Crée un champ caché n’ayant aucun rendu visuel
dans le formulaire mais permettant de transmettre
des informations invisibles pour l’utilisateur.
– exemple :
<input type="hidden" name="MAX_FILE_SIZE"
value="200"/>
227
Création d’un formulaire HTML
• L’élément <textarea>
– crée un champ de saisie de texte permettant la saisie sur
plusieurs lignes.
– Cet élément comporte une balise de fermeture </textarea> et
un contenu de texte par défaut affiché dans la zone de texte.
– Les attributs cols et rows donnent respectivement le nombre
de colonnes et de lignes de la zone de texte,
– Exemple :
<textarea name="commentaire" cols="45" rows="8" > Tapez vos
commentaires ici </textarea>
228
Création d’un formulaire HTML
• L’élément <select>
– Crée une liste de sélection d’options parmi lesquelles
l’utilisateur fait un choix,
– Chaque option devant être définie par un élément
<option> séparé.
– Exemple :
<select name="maliste">
<option value="valeur 1"> Texte choix 1</option>
<option value="valeur 2"> Texte choix 2</option>
<option value="valeur 3"> Texte choix 3</option>
</select>
229
Création d’un formulaire HTML
• Il comporte les attributs suivants :
– name="nom_select". Obligatoire. Donne le nom de la liste.
– size="Nombre". Détermine le nombre de choix visibles
simultanément.
– multiple="multiple". Autorise la sélection de plusieurs options
simultanément.
– L ’élément <option> comporte les attributs suivants :
• value="chaine". Obligatoire. Définit la valeur transmise au serveur
si l’option est sélectionnée.
• selected="selected". Définit l’option qui est sélectionnée par défaut
dans la liste si l’utilisateur ne fait pas de choix
230
Récupération des données du formulaire
• Récupération des données entrées par l’utilisateur
dans les champs du formulaire.
• lorsque l’utilisateur clique sur le bouton d’envoi une
requête HTTP est envoyée au serveur à destination du
script désigné par l’attribut action de l’élément
<form>.
• La requête contient toutes les associations entre
les noms des champs et leur valeur. Ces associations
se trouvent dans l’en-tête HTTP si la méthode POST est
utilisée et dans l’URL s’il s’agit de la méthode GET.
Récupération des données du formulaire
• Cas de la méthode POST
<form action= "<?= $_SERVER["PHP_SELF"] ?>" method="post">
<fieldset>
<legend><b>Infos</b></legend>
Nom : <input type="text" name="nom" size="40" />
<br />
Débutant : <input type="radio" name="niveau" value="débutant" />
Initié : <input type="radio" name="niveau" value="initié" /><br />
<input type="reset" value="Effacer" />
<input type="submit" value="Envoyer" />
</fieldset>
</form>
<?php
if(isset($_POST["nom"]) && isset($_POST["niveau"]))
{ echo "<h2> Bonjour ". stripslashes($_POST["nom"]). " vous êtes ".
$_POST["niveau"]." en PHP</h2>"; }
?>
10:48 231
24
0
232
Récupération des données du formulaire
• action= "<?= $_SERVER["PHP_SELF"] ?>"
Cela désigne le script lui-même comme cible pour
le traitement des données.
• Le code PHP contrôle d’abord l’existence des
variables $_POST["nom"] et $_POST["niveau"],
qui représentent respectivement le texte saisi et
la valeur associée à la case cochée de façon à
n’afficher le message qu’après l’envoi des
données.
233
Récupération des données du formulaire
• Cas de la méthode GET
• Vous récupérez les données du formulaire dans
les variables $_GET["nom"] et $_GET["niveau"],
comme ci-dessous :
<?php
if(isset($_GET["nom"]) && isset($_GET["niveau"]))
{ echo "<h2> Bonjour ". stripslashes ($_GET["nom"]). "
vous êtes ".$_GET["niveau"]." en PHP</h2>"; }
?>
234
Récupération des données du formulaire
• Les valeurs multiples
– Certains champs de formulaire peuvent permettre aux
visiteurs de saisir plusieurs valeurs sous un même nom de
composant.
– Comme dans l’exemple suivant :
• Bleu:<input type="checkbox" name="choix[]" value="bleu" />
• Blanc:<input type="checkbox" name="choix[]" value="blanc" />
– l’utilisateur peut cocher les deux cases simultanément.Le
programmeur récupère ces valeurs dans les variables
suivantes :
• $_POST["choix"][0]
• $_POST["choix"][1]
qui contient la valeur "bleu"
qui contient la valeur "blanc"
235
Récupération des données du formulaire
• Récupération des valeurs multiples
<!DOCTYPEhtml>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Listes à choix multiples</title>
</head>
<body>
<form method="post" action= " traitement.php" >
<fieldset>
<legend>Recherche d’emploi : complétez la fiche</legend>
<div>
<span>
Nom<input type="text" name="ident[]" />
Prénom<input type="text" name="ident[]" />
Âge<input type="number" step="1" name="ident[]" />
<br /><br />
Langues pratiquées<br />
<select name="lang[]" multiple="multiple">
<option value="français"> français</option>
236
Récupération des données du formulaire
<option value="anglais"> anglais</option>
<option value="allemand"> allemand</option>
<option value="espagnol"> espagnol</option>
</select><br /><br />
Compétences informatiques<br />
HTML 5<input type="checkbox" name="competent[]" value="HTML 5" />
CSS 3<input type="checkbox" name="competent[]" value="CSS 3" />
PHP<input type="checkbox" name="competent[]" value="PHP" />
MySQL<input type="checkbox" name="competent[]" value="MySQL" />
</span><br /><br />
<input type="reset" value="EFFACER"/>
<input type="submit" value="ENVOI"/>
</div>
</fieldset>
</form>
</body>
</html>
237
Récupération des données du formulaire
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Compétences informatiques</title>
</head>
<body>
<?php
if(isset($_POST["ident"]) && isset($_POST["lang"]) &&
isset($_POST["competent"]))
{
echo "<table border="1"><tr><th> Récapitulatif de votre fiche
d’informations
personnelles
</th></tr><tr><td>";
$nom=$_POST["ident"][0];
$prenom=$_POST["ident"][1];
238
Récupération des données du formulaire
$age=$_POST["ident"][2];
$lang = $_POST["lang"];
$competent=$_POST["competent"];
echo"Vous êtes :<b> $prenom ", $nom ,"</b><br
/>Vous avez <b>$age ans
</b> ";
echo "<br />Vous parlez :";
echo "<ul>";
foreach($lang as $valeur)
{
239
Récupération des données du formulaire
echo " <li> $valeur </li>";
}
echo "</ul>";
echo "Vous avez des compétences informatiques en :";
echo "<ul>";
foreach($competent as $valeur)
{
echo "<li> $valeur </li> ";
}
echo "</ul> </td></tr>";
}
else
{
echo"<script type="text/javascript">";
echo "alert('Saisissez votre nom et cochez au moins une compétence !');";
echo "window.history.back();";
echo "</script>";
}
?>
</body>
</html>
MYSQL
24
9
Se connecter à une BD MySQL en PHP
• PHP met à notre disposition deux API (Application
Programming Interface) :
– MySQLi ;
– PDO (PHP Data Objects).
• MySQLi ne fonctionne qu’avec les bases de données MySQL
• PDO fonctionne avec 12 systèmes de bases de données
différents.
• MySQLi et PDO sont orientés objet et ils supportent les
requêtes préparées qui servent à se prémunir des
injections SQL
25
0
Connexion au serveur avec MySQLi
• Pour se connecter au serveur MySQL en MySQLi , nous allons avoir
besoin de trois choses :
1. nom du serveur :localhost
2. nom d’utilisateur : root
3. son mot de passe: soit root soit une chaine de caractère vide
<?php
$servername = 'localhost';
//On établit la connexion
$username = 'root'; $password = '';
$conn = new mysqli($servername, $username, $password);
//On vérifie la connexion
if($conn->connect_error){
die('Erreur : ' .$conn->connect_error);
}
echo 'Connexion réussie';
$conn->close();
?>
• Pour fermer la connexion à la base de données ouverte la fin de
l’exécution du script, on utilise la méthode close(). 25
1
Connexion au serveur avec PDO
• Pour se connecter en utilisant PDO, nous allons
instancier la classe PDO en passant au
constructeur:
1. le nom du serveur,
2. Le nom de la base de données
3. Le nom d’utilisateur et le mot de passe.
• Pour détruire l’objet représentant la connexion et
effacer toutes ses références, on assigne la
valeur NULL à la variable gérant l’objet.
25
2
Connexion au serveur avec PDO
• Exemple:
<?php
$servername = 'localhost'; $username = 'root'; $password = '';
try{
$conn = new PDO("mysql:host=$servername ", $username,
$password);
//On définit le mode d'erreur de PDO sur Exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'Connexion réussie'; }
/*On capture les exceptions si une exception est lancée et on affiche
les informations relatives à celle-ci*/
catch(PDOException $e){ echo "Erreur : " . $e->getMessage();
$conn=null;
}
?>
25
3
Connexion au serveur avec PDO
• La méthode setAttribute() sert à configurer :
1. l’attribut PDO::ATTR_ERRMODE qui sert à créer un
rapport d’erreur
2. L’attribut PDO::ERRMODE_EXCEPTION qui demande
au PHP de lancer une exception issue de la classe
PDOException et d’en définir les propriétés afin de
représenter le code d’erreur et les informations
complémentaires.
• Le bloc catch capture l’exception PDOException et
affiche le message d’erreur correspondant.
25
4
Création d’une BD en utilisant PDO
• Pour créer une nouvelle base de données avec
PDO en PHP, on utilise la requête SQL CREATE
DATABASE suivie du nom de la base de données.
• Pour exécuter une requête SQL en PDO, on utilise
la méthode exec() qui va prendre en paramètre
une requête SQL.
• La méthode exec() va se charger d’exécuter notre
requête et de créer la base de données.
25
5
Création d’une BD en utilisant PDO
• Exemple :
<?php
$servername = 'localhost'; $username = 'root'; $password = '';
try{
$dbco = new PDO("mysql:host=$servername", $username,
$password);
$dbco->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE pdodb";
$dbco->exec($sql);
echo 'Base de données bien créée !';
}
catch(PDOException $e){
echo "Erreur : " . $e->getMessage();
}
?> 25
6
Création d’une table en utilisant
MySQL et PDO
• Pour créer une nouvelle table dans une base
de données,
– nous allons utiliser la requête SQL CREATE TABLE
suivie du nom que l’on souhaite donner à notre
table,
– nous allons également pouvoir préciser entre
parenthèse les noms des colonnes de notre table
ainsi que le type de données qui doit être stocké
dans chaque colonne.
25
7
Création d’une table en utilisant
MySQL et PDO
• Il existe quatre grands types de données
principaux en MySQL :
➢Les données de type texte,
➢Les données de type nombre,
➢Les données de type date
➢Les données de type spécial.
25
8
Création d’une table en utilisant
MySQL et PDO
• Les sous types de valeurs les plus courants et
les plus utilisés sont :
– INT : accepte un nombre entier de 4 octets,
– VARCHAR : accepte une chaine de longueur
variable (entre 0 et 65 535 caractères),
– TEXT : accepte une chaine de caractère d’une
longueur maximum de 65 535 caractères ,
– DATE : accepte une date se situant entre le 1er
janvier de l’an 1000 et le 31 décembre de l’an
9999.
25
9
Création d’une table en utilisant
MySQL et PDO
• Pour spécifier des contraintes supplémentaires pour
chacune des colonnes de notre table, on utilise les attributs
suivants:
– NOT NULL – Signifie que chaque entrée doit contenir une valeur
pour cette colonne. La valeur null n’est pas acceptée ;
– UNIQUE – Chacune des valeurs dans la colonne doit être unique;
– AUTO_INCREMENT – MySQL va automatiquement incrémenter
au champ pour chaque nouvelle entrée ;
– UNSIGNED –Cette contrainte permet de limiter les données
reçues aux nombres positifs (0 inclus).
26
0
Création d’une table en utilisant
MySQL et PDO
• PRIMARY KEY – Est utilisé pour identifier de manière unique chaque
nouvelle entrée dans une table. C’est une combinaison de NOT NULL et de
UNIQUE. PRIMARY KEY ne doit s’appliquer qu’à une colonne dans une
table mais chaque table doit obligatoirement posséder une colonne avec
une PRIMARY KEY.
• FOREIGN KEY – Utilisée pour empêcher des actions qui pourraient détruire
les liens entre des tables. La FOREIGN KEY sert à identifier une colonne qui
est identique à une colonne portant une PRIMARY KEY dans une autre
table ;
• CHECK – Sert à s’assurer que toutes les valeurs dans une colonne satisfont
à une certaine condition ou se trouve dans un certain intervalle spécifié ;
• DEFAULT value – Sert à définir une valeur par défaut qui va être
renseignée si aucune valeur n’est fournie ;
26
1
Création d’une table en utilisant
MySQL et PDO
• Nous allons créer une table « Clients » dans notre base
« pdodb ». cette table va contenir 9 colonnes :
– Id
– Nom
– Prenom
– Adresse
– Ville
– CodePostal
– Pays
– Mail
– DateInscription
26
2
Création d’une table en utilisant
MySQL et PDO
• Exemple:
<?php
$servname = 'localhost'; $dbname = 'pdodb'; $user = 'root'; $pass = '';
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE TABLE Clients(
Id INT UNSIGNED AUTO_INCREMENTPRIMARY KEY
,
Nom VARCHAR(30) NOT NULL,
Prenom VARCHAR(30) NOT NULL,
Adresse VARCHAR(70) NOT NULL,
Ville VARCHAR(30) NOT NULL,
Codepostal INT UNSIGNED NOT NULL,
Pays VARCHAR(30) NOT NULL,
Mail VARCHAR(50) NOT NULL,
DateInscriptionTIMESTAMP,
UNIQUE(Mail))";
$dbco->exec($sql);
echo 'Table bien créée !';
}
catch(PDOException $e){
?>
echo "Erreur : " . $e->getMessage(); }
263
Insérer des données dans une table
MySQL
• Pour insérer des données dans une table, nous allons utiliser
l’instruction SQL:
INSERT INTO nom_de_table (nom_colonne1, nom_colonne2,
nom_colonne3, …)
VALUES (valeur1, valeur2, valeur3, …)
• Les valeurs de type chaine de caractère doivent être placées entre
apostrophes ;
• La valeur NULL et les valeurs de type numérique ne doivent pas être
placées entre apostrophes.
• Il n’est pas nécessaire de préciser les colonnes possédant un
attribut AUTO_INCREMENT ou TIMESTAMP ni leurs valeurs
associées puisque par définition MySQL stockera automatiquement
les valeurs courantes.
26
4
Insérer des données dans une table
• Exemple:
<?php
$servname = 'localhost'; $dbname = 'pdodb'; $user = 'root'; $pass = '';
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO Clients(Nom,Prenom,Adresse,Ville,Codepostal,Pays,Mail)
VALUES(‘Salim',‘Adam',‘FBS',‘BM',23000, ‘Maroc', ‘Salim@gmail.com')";
$dbco->exec($sql);
echo 'Entrée ajoutée dans la table';
}
catch(PDOException $e){
echo "Erreur : " . $e->getMessage();
}
?>
• nous n’avons pas à préciser nos colonnes Id et DateInscription ni
les valeurs relatives à ces colonnes puisque celles-ci possèdent
respectivement un AUTO_INCREMENT et un TIMESTAMP.
26
5
Les transactions
• Lors de l’exécution d’un script il se peut que:
– certaines entrées soient insérées et pas d’autres,
– certaines entrées pourraient ne pas avoir toutes
leurs données insérées.
• Pour éviter cela, nous pouvons utiliser , dans
notre code, les méthodes :
• beginTransaction(),
• commit(),
• rollBack().
26
6
Les transactions
• La méthode beginTransaction() permet de
démarrer ce qu’on appelle une transaction et de
désactiver le mode autocommit.
• Toutes les manipulations faites sur la base de
données ne seront pas appliquées tant qu’on ne
mettra pas fin à la transaction en appelant
commit().
• La méthode rollBack() sert à annuler une
transaction si l’on s’aperçoit d’une erreur,
26
7
Les transactions
Exemple:
<?php
$servname = 'localhost'; $dbname = 'pdodb'; $user = 'root'; $pass = '';
try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbco->beginTransaction();
$sql = "INSERT INTO Clients(Nom, Prenom, Adresse, Ville, Codepostal, Pays, Mail)
VALUES(‘Salim', ‘yassen', ‘FBS', ‘BM', 23000, ‘Maroc', ‘salim@gmail.com')";
$dbco->exec($sql);
$dbco->commit();
echo 'Entrées ajoutées dans la table';
catch(PDOException $e){
$dbco->rollBack();
echo "Erreur : " . $e->getMessage();
}
}
?>
26
8
Mettre à jour des données dans une table
• Exemple:
<?php
$servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//On prépare la requête et on l'exécute
$sth = $dbco->prepare("
UPDATE Users
SET mail='v.durand@edhec.com'
WHERE id=2 ");
$sth->execute();
//On affiche le nombre d'entrées mise à jour
$count = $sth->rowCount();
print('Mise à jour de ' .$count. ' entrée(s)'); }
catch( PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
• rowCount() retourne le nombre de lignes affectées par la dernière requête
DELETE, INSERT ou UPDATE exécutée par l’objet de la classe PDOStatement
correspondant (en l’occurrence ici $sth). 26
9
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
Modifier la structure d’une table
• Ajouter une colonne dans une table
<?php
$servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass
= "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname",
$user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$sql = " ALTER TABLE Users
$dbco->exec($sql);
echo 'Colonne ajoutée';
ADD DateInscription TIMESTAMP ";
27
0
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
Modifier la structure d’une table
• Supprimer une colonne dans une table
<?php
$servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass
= "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname",
$user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$sql = "ALTER TABLE Users DROP COLUMN DateInscription ";
$dbco->exec($sql);
echo 'Colonne supprimée';
27
1
Modifier la structure d’une table
• Modifier une colonne dans une table
<?php
$servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass =
"";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user,
$pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$sql = " ALTER TABLE Users MODIFY COLUMN Prenom VARCHAR(50) ";
$dbco->exec($sql);
echo 'Colonne mise à jour';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
27
2
Supprimer des données d’une table
• Nous allons vouloir supprimer les utilisateurs dont le nom est: Ali
<?php
$servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$sql = "DELETE FROM Users WHERE nom=‘Ali'";
$sth = $dbco->prepare($sql);
$sth->execute();
$count = $sth->rowCount();
print('Effacement de ' .$count. ' entrées.');
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
27
3
Supprimer tts les données d’une table
• Essayons par exemple d’effacer toutes les données de la table «
Users » d’un coup.
<?php
$servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "DELETE FROM Users";
$sth = $dbco->prepare($sql);
$sth->execute();
$count = $sth->rowCount();
print('Effacement de ' .$count. ' entrées.');
}
catch(PDOException $e){
echo "Erreur : " . $e->getMessage();
}
?>
27
4
Supprimer complètement une table de
la base de données
• Exemple:
<?php
$servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass =
"";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user,
$pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$sql = "DROP TABLE Users";
$dbco->exec($sql);
echo 'Table bien supprimée';
}
catch(PDOException $e){
echo "Erreur : " . $e->getMessage();
}
?> 27
5
Supprimer complètement une base de
données
• Exemple:
<?php
$servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = "DROP DATABASE pdodb";
$dbco->exec($sql);
echo 'Base de données bien supprimée';
}
catch(PDOException $e){
?>
echo "Erreur : " . $e->getMessage(); }
27
6
sélection simple de données dans une BD
• Table « users » va contenir 5 colonnes :
– Une colonne « id », type INT, UNISGNED, PRIMARY
KEY, AUTO_INCREMENT
– Une colonne « prenom », type VARCHAR(30) NOT
NULL
– Une colonne « nom », type VARCHAR(30) NOT NULL
– Une colonne « mail », type VARCHAR(50)
– Une colonne « dateInscrit », type TIMESTAMP.
27
7
sélection simple de données dans une BD
<?php
$servname = "localhost"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname", $user,
$pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$createDB = "CREATE DATABASE cours";
$dbco->exec($createDB);
//On utilise la base tout juste créée pour créer une table
dedans
$createTb = "use cours";
$dbco->exec($createTb);
$createTb = "CREATE TABLE users(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
prenom VARCHAR(30) NOT NULL,
nom VARCHAR(30) NOT NULL,
mail VARCHAR(50),
dateInscrit TIMESTAMP)";
$dbco->exec($createTb);
$sth = $dbco->prepare("
INSERT INTOusers(prenom, nom, mail)
VALUES (:prenom, :nom, :mail) ");
$sth->bindParam(':prenom', $prenom);
$sth->bindParam(':nom',$nom);
$sth->bindParam(':mail',$mail);
$prenom = “Adam"; $nom = “Salim"; $mail
= “salim@gmail.com";
$sth->execute();
$prenom = "Victor"; $nom = "Durand";
$mail = "victor@gmail.com";
$sth->execute();
$prenom = "Julia"; $nom = "Joly"; $mail =
"july@gmail.com";
$sth->execute();
}
catch(PDOException $e){
echo "Erreur : " . $e->getMessage();
}
?>
27
8
sélection simple de données dans une BD
• Nous sélectionnons tous les prénoms et adresses mail de notre table « users ».
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname; dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*Sélectionne les valeurs dans les colonnes prenom et mail de la table
*users pour chaque entrée de la table*/
$sth = $dbco->prepare("SELECT prenom, mail FROM users");
$sth->execute();
/*Retourne un tableau associatif pour chaque entrée de notre table
*avec le nom des colonnes sélectionnées en clefs*/
$resultat = $sth->fetchAll( PDO::FETCH_ASSOC);
/*print_r permet un affichage lisible des résultats,
*<pre> rend le tout un peu plus lisible*/
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
27
9
sélection simple de données dans une BD
• La méthode fetchAll() est une méthode de la
classe PDOStatement qui va retourner un tableau
contenant toutes les lignes de résultats.
• La valeur FETCH_ASSOC va faire que le tableau
retourné sera un tableau multidimensionnels
contenant des tableaux indexés avec le nom des
colonnes dont on récupère les données en index.
28
0
Récupérer toutes les valeurs dans une table
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user,
$pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*Sélectionne toutes les valeurs dans la table users*/
$sth = $dbco->prepare("SELECT * FROM users");
$sth->execute();
/*Retourne un tableau associatif pour chaque entrée de notre table
*avec le nom des colonnes sélectionnées en clefs*/
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
/*print_r permet un affichage lisible des résultats, <pre> rend le tout un
peu plus lisible*/
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
28
1
Ne récupérer que les valeurs uniques
dans une table
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user,
$pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $dbco->prepare("SELECT DISTINCT prenom FROM users");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
//<pre> permet un affichage lisible des résultats affichés avec print_r()
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
28
2
Mettre en ordre les valeurs récupérées dans une table
• Sélectionnons tous les prénoms et noms de notre table « users » et trions
les résultats renvoyés selon l’ordre croissant des prénoms en tri principal
puis selon l’ordre décroissant des noms en tri secondaire.
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Tri croisant par prénoms puis décroissant par noms
$sth = $dbco->prepare("
SELECT prenom, nom
FROM users
ORDER BY prenom ASC, nom DESC ");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){
?>
echo "Erreur : " . $e->getMessage(); }
28
3
critères de sélection
• Les critères de sélection vont nous aider à créer
des requêtes SQL de sélection puissantes et
précises:
– WHERE ;
– AND, OR et NOT ;
– LIMIT ;
– LIKE et les jokers (wildcards) ;
– IN et BETWEEN ;
– EXISTS ;
– ANY et ALL.
28
4
?>
La clause SQL WHERE
• Dans la table « users » nous allons sélectionner tous les utilisateurs dont le
prénom est « Adam ».
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//On sélectionne tous les users dont le nom = Pierre
$sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users WHERE
prenom = ‘Adam‘ ");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
28
5
?>
Les opérateurs SQL AND, OR et NOT
• Nous allons pouvoir étendre les possibilités de la clause SQL WHERE grâce
aux opérateurs AND, OR et NOT.
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*On sélectionne tous les users dont le prenom = Pierre et le nom = Giraud*/
$sth = $dbco->prepare("
FROM users WHERE prenom = ‘Adam' AND nom =
SELECT prenom, nom, mail
‘Salim‘ ");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
28
6
?>
Les opérateurs SQL AND, OR et NOT
• L’opérateur SQL OR nous permet d’élargir notre condition de base en
rajoutant d’autres conditions.
• A la différence de AND, tous les résultats satisfaisants au moins l’une des
conditions mentionnées seront affichés.
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*On sélectionne tous les users dont le prenom = Adam ou le nom = Joly*/
$sth = $dbco->prepare("
SELECT prenom, nom, mail FROM users WHERE prenom = ‘Adam' OR nom = 'Joly' ");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
28
7
Les opérateurs SQL AND, OR et NOT
• l’opérateur SQL NOT va nous permettre d’afficher tous les résultats ne satisfaisant
pas une condition.
• On peut par exemple afficher tous les utilisateurs dont le prénom n’est pas
«Adam».
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//On sélectionne tous les users dont le prenom n'est pas Adam
$sth = $dbco->prepare("
SELECT prenom, nom, mail FROM users WHERE NOT prenom = ‘Adam‘ ");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException$e){ echo "Erreur : " . $e->getMessage(); }
?>
28
8
La clause LIMIT
• La clause SQL LIMIT est généralement utilisée
pour limiter le nombre de résultats retournés.
• La clause LIMIT va sélectionner des résultats
dans l’ordre des entrées de votre table.
• On va pouvoir spécifier à partir de quelle
entrée on souhaite commencer à récupérer
des résultats grâce au mot OFFSET.
28
9
La clause LIMIT
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*Sélectionne 2 résultats à partir de la 2è entrée de la table*/
$sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users
$sth-> execute();
LIMIT 2 OFFSET 1 ");
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
29
0
L’opérateur SQL LIKE et les jokers (wildcards)
• Nous allons utiliser l’opérateur SQL LIKE
conjointement avec une clause WHERE afin de
chercher un schéma spécifique dans une colonne.
• Nous allons également généralement utiliser
l’opérateur LIKE avec des jokers ou wildcards.
• Il existe deux jokers que nous allons pouvoir
utiliser avec LIKE :
– Le signe % qui va représenter zéro, un ou plusieurs
caractères ;
– Le signe _ qui va représenter un caractère
exactement.
29
1
L’opérateur SQL LIKE et les jokers (wildcards)
• voici quelques exemples de parties de requêtes
utilisant LIKE et des jokers ainsi que leur signification :
Requête Signification
WHERE users LIKE ‘p%’ Cherche les valeurs qui commencent par un « p »
WHERE users LIKE ‘%e’ Cherche les valeurs qui se terminent par « e »
WHERE users LIKE ‘%e%’ Cherche les valeurs qui possèdent un « e »
WHERE users LIKE ‘p%e’
Cherche les valeurs qui commencent par « p » et se
terminent par « e »
WHERE users LIKE
‘p e’
Cherche des valeurs de 6 caractères exactement qui
commencent par « p » et se terminent par « e »
WHERE users LIKE ‘p_%’
Cherche des valeurs de 2 caractères ou plus qui commencent
par « p »
29
2
L’opérateur SQL LIKE et les jokers (wildcards)
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Cherche tous les noms contenant un "r"
$sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users WHERE nom
LIKE '%r%' ");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
echo "Erreur : " . $e->getMessage(); }
catch(PDOException $e){
?>
29
3
Les opérateurs SQL IN et BETWEEN
• L’opérateur SQL IN va s’utiliser conjointement
avec une clause WHERE.
• Cet opérateur va nous permettre de préciser une
liste de données parmi lesquelles nous devons
sélectionner nos données.
• Utiliser IN revient finalement à utiliser plusieurs
conditions OR mais avec une notation allégée et
plus rapide.
29
4
Les opérateurs SQL IN et BETWEEN
< <?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Cherche tous les utilisateurs dont le prénom est Adam ou Victor
$sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users
prenom IN (‘Adam', 'Victor')
WHERE
");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?> 29
5
Les opérateurs SQL IN et BETWEEN
• Sélectionner tous les utilisateurs dont le id se trouve entre 1 et 2;
<?php
$servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "";
try{
$dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Sélectionne les utilisateurs dont le nom se trouve entre F et Joly
$sth = $dbco->prepare("
SELECT prenom, nom, mail FROM users WHERE id BETWEEN 1 AND 2' ");
$sth-> execute();
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($resultat);
echo '</pre>';
}
catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }
?>
29
6

Developpement web dynamique_Base de donnees.pdf

  • 1.
  • 2.
    PLAN ➢ Présentation duPHP ➢ La syntaxe de base ➢ Les types ➢ Les variables ➢ Les constantes ➢ Les expressions ➢ Les opérateurs ➢ Les structures de contrôle ➢ Les fonctions ➢ Gestion des erreurs ➢ Les tableaux ➢ La date en PHP ➢ PHP orienté objet ➢ Principe d’encapsulation ➢ Surcharge de propriétés et de méthodes ➢ Classes étendues et héritage ➢ Les classes et méthodes abstraites ➢ Étendre des classes abstraites ➢ Les interfaces ➢ Les variables superglobales ➢ Création d’un formulaire HTML ➢ Récupération des données d’un formulaire ➢ MySQL ➢ Se connecter à une BD MySQL en PHP ➢ Gestion d’une BD en utilisant PDO 2 2
  • 3.
    3 PHP Data Objects(PDO) ➢ PDO ➢ Bases de données supportées ➢ Classes prédéfinies ➢ Connexions et gestionnaire de connexion ➢ Gestion des erreurs de connexion ➢ Gestion des erreurs : code d'erreur ➢ Gestion des erreurs : exceptions ➢ Exécution d'une requête ➢ Exploitation des résultats d'une requête ➢ Modes de récupération des données ➢ Préparation d'une requête ➢ Association des paramètres d'une requête ➢ Préparation puis exécution d'une requête ➢ Intérêt des requêtes préparées 3
  • 4.
    4 Introduction • Créé en1994 par Rasmus Lerdorf pour les besoins des pages web personnelles (livre d’or, compteurs, etc.) • A l’époque, PHP signifiait Personnal Home Page. • Il supporte tous les standards du web, gratuit et libre «Open Source» • Il existe par ailleurs des applications web prêtes à l’emploi (PHPNuke, PHP SPIP, PHPSlash…) permettant de monter facilement et gratuitement son portail. • Les serveurs d’application les plus utilisés pour développer des sites web dynamique en PHP : – EasyPHP – WAMP – XAMPP – …. 4
  • 5.
  • 6.
    6 Langages côté clientet côté serveur • Un site Internet n’est qu’un ensemble de fichiers de codes liés entre eux. • Le code écrit dans ces fichiers, encore appelé « script », va pouvoir être exécuté soit côté client (navigateur), soit du côté du serveur. • Les navigateurs ne sont capables de comprendre et de n’exécuter que du code HTML, CSS et JavaScript. • Un navigateur est incapable de comprendre du code PHP. • Lorsqu’un navigateur demande à un serveur de lui servir une page, le serveur va donc se charger d’exécuter tout code qui ne serait pas compréhensible par le navigateur et va lui renvoyer le résultat. 6
  • 7.
    Où écrire lecode PHP ? • On écrit nos scripts PHP soit dans des fichiers dédiés soit intégré au sein du code HTML. • Les fichiers qui contiennent du PHP doivent être enregistrés avec l’extension .php. • Nous allons entourer le code PHP avec une balise PHP qui a la forme suivante : <?php ?>. • Les instructions se terminent avec un point virgule 10:48 PHP & MySQL 7 7
  • 8.
    8 Intégration d’un scriptdans une page Les pages web dynamiques PHP doivent avoir la structure : Exemple : <!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php //Scripts PHP echo 'Hello World <br>'; ?> <p>Un paragraphe</p> </body> </html> 8
  • 9.
    9 Intégration d’un scriptdans une page Autres syntaxes d’intégration : <!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <? //Scripts PHP echo 'Hello World <br>'; ?> <p>Un paragraphe</p> </body> </html> 9
  • 10.
    10 Intégration d’un scriptdans une page Autres syntaxes d’intégration : <!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <script language="php"> echo 'Hello World <br>'; </script> <p>Un paragraphe</p> </body> </html> //Scripts PHP 10
  • 11.
    11 Commentaires • Un scripten langage php se commente comme en langage C/C++ : <?php // commentaire de fin de ligne /* commentaire sur plusieurs lignes */ ?> • Tout ce qui se trouve dans un commentaire est ignoré. Il est conseillé de commenter largement les scripts.
  • 12.
    12 Affichage • Les fonctionsd’affichage : – echo : écriture dans le navigateur – print() : écriture dans le navigateur – Exemples : – echo "Bonjour<br>"; – print("Bonjour"); – élément <br> ne sera pas affiché mais va permettre d’indiquer un retour à la ligne au navigateur.
  • 13.
    13 Enregistrer et exécuterun fichier PHP • Enregistrer le fichier avec l’extension .php dans le répertoire www si vous utilisé WAMP. • Pour lancer l’exécution du fichier PHP créé, il suffit d’ouvrir un nouvel onglet dans du navigateur favori et de renseigner l’adresse localhost.
  • 14.
    14 Les variables • Unevariable est un conteneur servant à stocker des informations, comme une chaine de caractères ou un nombre. • Une variable ne va exister que durant le temps de l’exécution du script l’utilisant. • il y a quelques règles à respecter lors de la déclaration d’une variable : – Toute variable doit commencer par le signe $ qui sera suivi du nom de la variable ; – Le nom d’une variable doit obligatoirement commencer par une lettre ou un underscore ; – Le nom d’une variable ne doit contenir que des lettres, des chiffres et des underscores mais pas de caractères spéciaux ; – Le nom d’une variable ne doit pas contenir d’espace.
  • 15.
    15 Les variables • Letypage des variables est implicite en php. Il n’est donc pas nécessaire de déclarer leur type au préalable ni même de les initialiser avant leur utilisation. • Exemple : <?php $Nom="je m'appelle Adam"; $age=30; $Tele="1010"; echo gettype($Tele); ?> • Il est possible de convertir une variable en un type primitif grâce au cast (comme en C). – Exemple : // $str vaut la chaîne "12" // $nbr vaut le nombre 12 • $str = "12"; • $nbr = (int)$str; • echo $nbr
  • 16.
    16 Les variables • Quelquesfonctions : – empty($var) : renvoie vrai si la variable est vide – isset($var) : renvoie vrai si la variable existe – unset($var) : détruit une variable – gettype($var) : retourne le type de la variable --settype($var, "type") : convertit la variable en type : (Integer, string ) – vérifier si une variable est is_long(), is_double(), is_string(), is_array(), is_object(), is_bool(), is_float(), is_numeric(), is_integer(), is_int()…
  • 17.
    17 Les variables • Laportée d’une variable est limitée au bloc dans lequel elle a été crée. • Une variable locale à une fonction n’est pas connue dans le reste du programme. • Une variable du programme n’est pas connue dans une fonction. • Une variable créée dans un bloc n’est pas connue dans les autres blocs, mêmes supérieurs.
  • 18.
    10:4 18 Types dedonnées • En PHP, on distingue 8 types de données différents: – Le type String ( chaine de caractères ); – Le type Integer ( nombre entier ); – Le type Float ( nombre décimal ); – Le type Boolean ( booléen ); – Le type Array ( tableau ); – Le type Object ( objet ); – Le type NULL (NULL ); – Le type Resource (ressource); • Le type de données Null est un type un peu particulier puisqu’il correspond à l’absence de valeur et sert donc à représenter des variables vides en PHP.
  • 19.
    10:4 19 Chaîne decaractères • Le premier type de données qu’une variable va pouvoir stocker est le type String ou chaîne de caractères. • Une chaine de caractères est une séquence de caractères, • Toute valeur stockée dans une variable en utilisant des guillemets ou des apostrophes sera considérée comme une chaine de caractères,
  • 20.
    10:4 20 Constantes • L’utilisateurpeut définir des constantes dont la valeur est fixée une fois pour toute. • Les constantes ne portent pas le symbole $ (dollars) et ne sont pas modifiables. • Syntaxe : define("var",valeur) : définit la constante var (sans $) de valeur, • Exemples : define("author", "Test"); echo author; // affiche Test define("MY_YEAR", 1990); echo MY_YEAR; // affiche 1990
  • 21.
    10:4 21 Les opérateurs •Un opérateur est un symbole qui va être utilisé pour effectuer certaines actions notamment sur les variables et leurs valeurs. – Les opérateurs arithmétiques ; – Les opérateurs d’affectation ; – Opérateurs sur les bits ; – Opérateurs de comparaison ; – Opérateur de contrôle d’erreur ; – Opérateurs d’incrémentation et décrémentation ; – Les opérateurs logiques ; – Opérateurs de chaînes ; – Opérateurs de tableaux ; – Opérateurs de types ;
  • 22.
    10:4 22 Opérateur deconcaténation (le point) • Exemple: <?php $prenom = "Adam"; $nom = "Salim"; $age = 12; echo "Je m'appelle $prenom et j'ai $age ans <br>"; echo "Je m'appelle {$prenom} et j'ai {$age} ans <br>"; echo 'Je m'appelle $prenom et j'ai $age ans <br>'; $var1 = "Je suis $prenom $nom, j'ai $age ans <br>"; $var2 = "Je suis {$prenom} {$nom}, j'ai {$age} ans <br>"; $var3 = 'Je suis $prenom $nom, j'ai $age ans'; $var4= "Je suis " .$prenom. " " .$nom. ", j'ai " .$age. " ans"; $var5= 'Je suis ' .$prenom. ' ' .$nom. ', j'ai '.$age. ' ans'; echo $var1; echo $var2; echo $var3; echo $var4; echo $var5; ?>
  • 23.
    10:4 23 Les opérateursarithmétiques • En PHP, nous allons pouvoir utiliser les opérateurs arithmétiques suivants : Opérateur Nom de l’opération associée + Addition - Soustraction * Multiplication / Division % Modulo (reste d’une division euclidienne) ** Exponentielle (élévation à la puissance d’un nombre par un autre)
  • 24.
    10:4 24 Les opérateursarithmétiques • Exemple: <?php $x = 2 + 3 * 4; //$x stocke 14 $y = (2 + 3) * 4; //$y stocke 20 $z = 2 ** 3 - 4 * 4 / 8; //$z stocke 6 echo '$x : ' .$x. '<br>$y : ' .$y. '<br>$z : ' .$z; ?>
  • 25.
    10:4 25 Les opérateursd’affectation / combinés Les opérateurs d’affectation permettent d’affecter une certaine valeur à une variable: Opérateur Définition .= Concatène puis affecte le résultat += Additionne puis affecte le résultat -= Soustrait puis affecte le résultat *= Multiplie puis affecte le résultat /= Divise puis affecte le résultat %= Calcule le modulo puis affecte le résultat **= 8 Élève à la puissance puis affecte le résultat
  • 26.
    10:4 26 Les opérateursd’affectation / combinés • Exemple: <?php $a = "Bonjour"; $a .= " le monde"; //$a stocke "Bonjour le monde" echo '$a stocke : ' .$a. '<br>'; $x = 5; $x -= 3; //$x stocke désormais 2 echo '$x stocke : ' .$x. '<br>'; $y = 3; $y **= $x; echo '$y stocke : ' .$y; //$y stocke 3^2 = 3 * 3 = 9 ?> $y à la puissance $x
  • 27.
    10:4 27 Les opérateursde comparaison Opérateur Définition == Permet de tester l’égalité sur les valeurs === Permet de tester l’égalité en termes de valeurs et de types != Permet de tester la différence en valeurs <> Permet également de tester la différence en valeurs !== Permet de tester la différence en valeurs ou en types < Permet de tester si une valeur est strictement inférieure à une autre > Permet de tester si une valeur est strictement supérieure à une autre <= Permet de tester si une valeur est inférieure ou égale à une autre >= Permet de tester si une valeur est supérieure ou égale à une autre
  • 28.
    10:4 28 Les opérateursde comparaison <?php $x = 4; //On affecte la valeur 4 à $x /*On compare la valeur contenue dans $x à 4 en valeur. *On renvoie le résultat de la comparaison grâce à var_dump()*/ var_dump($x == 4); echo '<br>'; var_dump($x > 7); echo '<br>'; /*On compare la valeur de $x à la chaine de caractères "4" en *valeur simplement*/ var_dump($x == "4"); echo '<br>'; /*On compare la valeur de $x à la chaine de caractères "4" en *termes de valeur et de type*/ var_dump($x === "4"); echo '<br>'; var_dump($x != "4"); echo '<br>'; var_dump($x !== "4"); echo '<br>'; ?>
  • 29.
    10:4 29 Les opérateursde comparaison • Lorsqu’on utilise un triple égal ===, on cherche à effectuer une comparaison non seulement sur la valeur mais également sur le type des deux opérandes. • La fonction var_dump() est utilisée pour afficher des informations structurées (type et valeur) sur une ou plusieurs variables.
  • 30.
    10:4 30 La conditionif en PHP • La condition if va nous permettre d’exécuter un bloc de code si et seulement si le résultat d’un test vaut true. • Exemple: <?php $x = 4; //On affecte la valeur 4 à $x $y = 2; //On affecte la valeur 2 à $y if($x > 1){ echo '$x contient une valeur supérieure à 1'; } if($x == $y){ echo '$x et $y contiennent la même valeur'; } ?>
  • 31.
    La condition if…elseen PHP • La structure conditionnelle if…else nous permet d’exécuter un premier bloc de code si un test renvoie true ou un autre bloc de code dans le cas contraire. • Exemple <?php $x = 4; //On affecte la valeur 4 à $x $y = 2; //On affecte la valeur 2 à $y if($x > 1){ echo '$x contient une valeur stric. supérieure à 1 <br>'; } else{ echo '$x contient une valeur inférieure ou égale à 1 <br>'; } if($x == $y){ echo '$x et $y contiennent la même valeur <br>'; }else{ echo '$x et $y contiennent des valeurs différentes <br>'; } 10:48 ?> 31 31
  • 32.
    32 La condition if…elseif…elseen PHP • La condition if…elseif…else est une structure conditionnelle encore plus complète que la condition if…else puisqu’elle nous permet de générer autant de cas que l’on souhaite. • Exemple: <?php $x = 4; //On affecte la valeur 4 à $x $y = 2; //On affecte la valeur 2 à $y if($x > 1){ echo '$x contient une valeur stric. supérieure à 1 <br>'; }elseif($x == 1){ echo '$x contient la valeur 1 <br>'; }else{ echo '$x contient une valeur stric. inférieure à 1 <br>'; } ?>
  • 33.
    33 Les opérateurs logiques •Les opérateurs logiques vont être principalement utilisés avec les conditions: Opérateur Définition AND Renvoie true si toutes les comparaisons valent true && Renvoie true si toutes les comparaisons valent true OR Renvoie true si une des comparaisons vaut true || Renvoie true si une des comparaisons vaut true XOR Renvoie true si une des comparaisons exactement vaut true ! Renvoie true si la comparaison vaut false (et inversement)
  • 34.
    34 Les opérateurs logiques •Exemple <?php $x = 4; $y = -12; //On affecte la valeur 4 à $x //On affecte la valeur -12 à $y if($x >= 0 AND $x <= 5){ echo '$x contient une valeur entre 0 et 5 <br>'; } ?>
  • 35.
    L’instruction switch <?php $x =2; switch($x){ case 0: echo '$x stocke la valeur 0'; break; case 1: echo '$x stocke la valeur 1'; break; case 2: echo '$x stocke la valeur 2'; break; case 3: echo '$x stocke la valeur 3'; break; default: echo '$x ne stocke pas de valeur entre 0 et 4'; } 10:48 ?> 35 35
  • 36.
    36 Les boucles • Lesboucles vont nous permettre d’exécuter plusieurs fois un bloc de code tant qu’une condition donnée est vérifiée. • Nous disposons de quatre boucles différentes en PHP : – La boucle while (« tant que ») ; – La boucle do… while (« faire… tant que ») ; – La boucle for (« pour ») ; – La boucle foreach (« pour chaque ») ;
  • 37.
    37 La boucle while •La boucle while va nous permettre d’exécuter un certain bloc de code tant qu’une condition donnée est vérifiée. • Exemple: <?php $x = 0; while($x <= 10){ echo '$x contient la valeur ' .$x. '<br>'; $x++; } ?>
  • 38.
    38 la boucle do…while • la boucle do… while nous permet d’exécuter un code tant qu’une condition donnée est vraie, • Cette fois-ci le code sera exécuté avant que la condition soit vérifiée. • Exemple : <?php $y = 20; do{ echo '$y contient la valeur ' .$y. '<br>'; $y++; }while($y <= 5); ?>
  • 39.
    39 La boucle for •La boucle for fonctionne selon trois phases : – Une phase d’initialisation ; – Une phase de test ; – Une phase d’incrémentation. Exemple: <?php for($x = 0; $x <= 5; $x++){ echo '$x contient la valeur ' .$x. '<br>'; } ?>
  • 40.
    La boucle foreach •La boucle foreach est particulièrement efficace pour lister les tableaux associatifs dont il n’est nécessaire de connaître ni le nombre d’éléments ni les clés. • Syntaxe : foreach($tableau as $valeur) { //bloc utilisant la valeur de l'élément courant Echo $valeur } • La variable $valeur contient successivement chacune des valeurs du tableau. 40
  • 41.
    La boucle foreach •la deuxième syntaxe est la suivante : foreach($tableau as $cle=>$valeur) { //bloc utilisant la valeur et la clé de l'élément courant } • la variable $cle contient successivement l’indice ou la clé de chacun des éléments du tableau dans l’ordre numérique pour les tableaux indicés et dans l’ordre de création des éléments pour les tableaux associatifs. • La variable $valeur contient la valeur associée à la $clé ou à l’indice courant. 41
  • 42.
    La boucle foreach <?php //Créationd'un tableau associatif for($i=0;$i<=8;$i++) { $tab["client".$i] = rand(100,1000); } //Lecture des clés et des valeurs foreach($tab as $cle=>$val) { echo " Le client de login <b>$cle</b> a le code <b>$val</b><br>";} ?> Le client de login client0 a le code 638 Le client de login client1 a le code 569 ........................................ 42
  • 43.
    43 L’instruction break • Ilest possible d’arrêter complètement une boucle for, foreach , do…while ou while avant son terme normal si une condition particulière est vérifiée, à l’aide de l’instruction break. • Le script n’est pas arrêté, comme avec l’instruction exit, et seule la boucle en cours se termine. • Pour arrêter plusieurs boucles en même temps, on emploie la syntaxe suivante : – break n; // n doit être non nul – n désigne le nombre de boucles les plus internes que vous souhaitez fermer.
  • 44.
  • 45.
    45 L’instruction continue • l’instructioncontinue n’arrête pas la boucle en cours mais seulement l’itération en cours. • La variable compteur est incrémentée immédiatement, et toutes les instructions qui suivent le mot-clé continue ne sont pas exécutées lors de l’itération en cours.
  • 46.
    46 L’instruction continue • Exemple: <?php //Interruptiond'une boucle for for($i=0;$i<20;$i++) { if($i%5==0) { continue; } echo $i,"<br>"; }
  • 47.
    47 L’instruction goto • gotorenvoie l’exécution en un point précis du script marqué par un label (dit aussi étiquette), • un label est constitué par une chaîne de caractères terminée par le caractère : • Exemple: <?php goto label_1; echo 'Cacher'; label_1 : echo 'Voir'; ?>
  • 48.
    48 Gestion des erreurs •La gestion des erreurs a pour but de signaler les problèmes au visiteur et d’éviter l’affichage des messages d’erreur bruts tels que PHP les envoie au navigateur. • Exemple: <?php $a=10; $b=0; echo $a/$b; fopen("inconnu.txt","r"); ?> • les messages suivants apparaissent: – Fatal error: Division by zero – Warning: fopen(inconnu.txt) [function.fopen]: failed to open stream: No such file or directory
  • 49.
    49 Gestion des erreurs •Le premier message correspond à la division par 0, • le second à la tentative d’ouverture d’un fichier qui n’existe pas. • Faire précéder l’appel d’une fonction du caractère @ permet d’éviter l’affichage des messages d’erreur: – @fopen("inconnu.txt","r").
  • 50.
    50 Gestion des erreurs •Utiliser la fonction error_reporting(), qui permet de n’afficher que certains messages selon le type d’erreur. • Sa syntaxe est – int error_reporting ( [int niveau]). • C’est le paramètre niveau qui permet de choisir le niveau d’affichage des messages d’erreur. • Vous pouvez combiner plusieurs valeurs avec l’opérateur |, comme dans le code suivant : – error_reporting(E_WARNING | E_PARSE) ; – qui permet de n’afficher que les alertes et les erreurs de syntaxe. • Pour bloquer tous les messages d’erreur, il faut passer à la fonction le paramètre 0. Cette fonction doit être utilisée dès le début du script.
  • 51.
    51 Gestion des erreurs ConstanteValeur Niveau d’affichage E_ERROR 1 Erreur fatale qui provoque l’arrêt du script, par exemple, l’appel d’une fonction qui n’existe pas. E_WARNING 2 Avertissement ne provoquant pas l’arrêt du script, par exemple, une division par 0. E_PARSE 4 Erreur de syntaxe détectée par l’analyseur PHP et provoquant l’arrêt du script, par exemple l’oubli du point-virgule en fin de ligne. E_NOTICE 8 Avis que le script a rencontré un problème simple qui peut ne pas être une erreur. E_ALL 4095 Toutes les erreurs Les principales valeurs sont indiquées dans le tableau suivant.
  • 52.
    <?php // Turn offall error reporting error_reporting(0); // Report simple running errors error_reporting(E_ERROR | E_WARNING | E_PARSE); // Reporting E_NOTICE can be good too (to report uninitialized // variables or catch variable name misspellings ...) error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); // Report all errors except E_NOTICE error_reporting(E_ALL & ~E_NOTICE); // Report all PHP errors error_reporting(E_ALL); // Report all PHP errors error_reporting(-1); // Same as error_reporting(E_ALL); ini_set('error_reporting', E_ALL); ?> 52 Gestion des erreurs
  • 53.
    53 Gestion des exceptions •Définition: Une exception est un mécanisme qui permet d’intercepter une erreur générée par un script et de déclencher une action en réponse à cette erreur. • Gérer une exception consiste à – délimiter un ou des blocs de code – et à prévoir une action particulière qui doit être réalisée dans le cas où l’erreur prévue se produit.
  • 54.
    54 Gestion des exceptions •Créez un bloc à l’aide de try: – try délimite le code dans lequel peut survenir une erreur. – Ce bloc contient une instruction throw pour déclencher l’exception en créant un objet de type Exception à l’aide du mot-clé new.
  • 55.
    55 Gestion des exceptions •Créez un bloc à l’aide de catch associée au bloc try précédent. – Il comporte le code qui va gérer l’erreur si elle se produit. – C’est ce bloc qui utilise l’objet Exception créé par l’instruction throw. – Si aucune erreur ne se produit dans le bloc try, l’objet Exception n’est pas créé, et le code du bloc catch est ignoré. – L ’exécution se poursuit dans tous les cas après le bloc catch.
  • 56.
    56 Gestion des exceptions •Créez un bloc finally qui contient le code à exécuter obligatoirement, qu’une erreur se soit produite ou non. • Un gestionnaire d’exceptions a donc la structure suivante : <?php try { // Code à surveiller if(erreur prévue){throw new Exception();} else{// Résultat;} } catch(Exception $except) { // Gestion de l’erreur } finally { //Code qui sera forcément exécuté } ?>
  • 57.
    Gestion des exceptions •Le constructeur de l’objet Exception créé dans l’instruction throw reçoit deux paramètres, – Message(une chaîne contenant le message d’erreur), – code de l’objet(un entier qui définit un code d’erreur). • Cet objet est utilisé dans le bloc catch en appelant ses méthodes pour afficher des informations sur l’exception. • Le tableau suivant donne la liste et le rôle des 10:48méthodes de l’objet Exception. 56 57
  • 58.
    58 Les méthodes del’objet Exception Méthode Définition construct() Constructeur de l’objet. Il est appelé automatiquement lors de la création d’un objet avec le mot-clé new. Il définit les propriétés message et code de l’objet. Cette méthode ne doit pas être appelée explicitement. getMessage() Retourne la valeur de la propriété message dans une chaîne. getCode() Retourne la valeur de la propriété code sous la forme d’un entier. getFile() Retourne la valeur de la propriété file qui contient le nom et le chemin d’accès du fichier dans lequel s’est produite l’erreur. getLine() Retourne la valeur de la propriété line qui indique le numéro de ligne à laquelle a été créée l’exception. toString() Retourne une chaîne contenant toutes les informations sur l’exception.
  • 59.
    59 Création d’un gestionnaired’exceptions <?php $a=100; $b=0; try { if($b==0){throw new Exception("Division par 0",7);} else{echo "Résultat de : $a / $b = ",$a/$b;} } catch(Exception $except) { echo "Message d'erreur :",$except->getMessage(),"<hr>"; echo "Nom du fichier :",$except->getFile(),"<hr>"; echo "Numéro de ligne :",$except->getLine(),"<hr>"; echo "Code d'erreur :",$except->getCode(),"<hr>"; echo " toString :",$except-> toString(),"<hr>"; } finally { echo "L'exception a été gérée, le script continue<hr/>"; } echo "Vraie Fin"; ?>
  • 60.
    <?php function inverse($x) { if(!$x) { throw new Exception('Division par zéro.'); } return 1/$x; } try { echo inverse(5) . "n"; } catch (Exception $e) { echo 'Exception reçue : ', $e->getMessage(), "n"; } finally { echo "Première fin.n"; } try { echo inverse(0) . "n"; } catch (Exception $e) { echo 'Exception reçue : ', $e->getMessage(), "n"; } finally { echo "Seconde fin.n"; } // On continue l'exécution echo "Bonjour le monde !n"; ?> 60
  • 61.
    <?php try{ try { throw newException("Hello"); } catch(Exception $e) { echo $e->getMessage()." catch inn"; throw $e; } finally { echo $e->getMessage()." finally n"; throw new Exception("Bye"); } } catch (Exception $e) { echo $e->getMessage()." catch outn"; } ?> The output is: Hello catch in Hello finally Bye catch out 61
  • 62.
  • 63.
    Gestion de plusieursexceptions 63
  • 64.
    64 Les tableaux • Lafonction array() – La fonction array() permet de créer de manière rapide des tableaux indicés ou associatifs. $tab = array(valeur0, valeur1, …, valeurN); – Elle peut être remplacée par une syntaxe courte en écrivant simplement [] à la place de la fonction array(). $tab=[valeur0, valeur1, …, valeurN];
  • 65.
    65 Les tableaux • Lestableaux indicés La façon la plus élémentaire de créer un tableau indicé est: $tab[n] = valeur; • n est un indice entier quelconque, • valeur est un scalaire ou une variable de type integer, double, boolean, string ou array.
  • 66.
    66 Les tableaux • Lestableaux associatifs La même fonction array() permet aussi de créer rapidement un tableau associatif en définissant pour chacun de ses éléments une clé et une valeur. $tab= array("cléA"=>'valeurA', "cléB"=>'valeurB',… "cléZ"=>'valeurZ') Ou encore: $tab= ["cléA"=>'valeurA', "cléB"=>'valeurB', "cléZ"=>'valeurZ'];
  • 67.
    67 Tableaux associatifs -parcours $cles = array_keys($t); for ($i = 0; $i < sizeof($cles); $i++) { echo $cles[$i], $t[$cles[$i]]; } //ou avec foreach foreach ($t as $key => $value) { echo $key, $value; } NB: array_keys — Renvoie toutes les clés ou un sous-ensemble des clés d'un tableau
  • 68.
    <?php $array = array(0=> 100, "color" => "red"); print_r(array_keys($array)); $array = array("blue", "red", "green", "blue", "blue"); print_r(array_keys($array, "blue")); $array = array("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large") ); print_r(array_keys($array)); ?> 68
  • 69.
    69 Les tableaux • Lestableaux multidimensionnels – PHP ne comporte pas de méthode explicite de création de tableaux multidimensionnels. – Un élément de tableau peut être un tableau lui- même. – La création de tableau comportant un nombre quelconque de dimension en est d’autant facilitée.
  • 70.
    70 Les tableaux Exemple: <? Php $A=array(array('a00','a01','a02'), array('a10','a11','a12'), array('a20','a21','a22')); //Affichage des éléments du tableau for($i=0; $i<count($A); $i++) { echo "<br>"; for($j=0; $j<count($A[$i]); $j++) { echo " ".$A[$i][$j]; } } ?> • Afin de visualiser la structure complète du tableau $A, vous pouvez utiliser la fonction print_r($A), • La fonction var_dump($A) permet d’afficher un ensemble d’informations encore plus complètes sur le tableau. • La fonction count($A) détermine le nombre d’éléments d’un tableau.
  • 71.
    71 Lecture d’un tableau -for- •Tableau unidimensionnelle <?php $tab=array("Beni Mellal", "Rabat", "Casa"); for ($i=0;$i<count($tab);$i++) { echo "L'élément $i est $tab[$i]<br>"; } ?> – Le listing fournit le résultat suivant : • L'élément 0 est Beni Mellal • L'élément 1 est Rabat • L'élément 2 est Casa
  • 72.
    72 Lecture d’un tableau -while- <?php $tab=array("BeniMellal", "Rabat", "Casa"); $i=0; while(isset($tab[$i]) ) { echo "L'élément $i est $tab[$i] <br >"; $i++; } ?> • L’expression isset($tab[$i]) prend la valeur TRUE tant que l’élément désigné par $tab[$i] existe. • Sinon, elle prend la valeur FALSE, ce qui est le cas en fin de tableau. • Vous pouvez initialiser la variable $i à 0 avant de démarrer la boucle de lecture au cas où elle aurait été utilisée auparavant dans le script et conserverait une valeur.
  • 73.
    73 Lecture d’un tableau -each- • $element = each($tab); • la fonction each() reçoit comme paramètre une variable de type array. • Elle retourner un tableau à quatre éléments qui contient les informations sur l’élément courant du tableau passé en paramètre puis de pointer sur l’élément suivant.
  • 74.
    74 Lecture d’un tableauunidimensionnel : each • $element est le tableau de résultats contenant les informations sur l’élément courant de $tab, sous la forme : – $element[0], qui contient l’indice de l’élément courant. – $element[1], qui contient la valeur de l’élément courant. – $element["key"], qui contient la clé de l’élément courant. – $element["value"], qui contient la valeur de l’élément courant. • Les couples $element[0]-$element[1] sont généralement utilisés pour récupérer les couples indice-valeur des tableaux indicés, • les couples $element["key"]-$element["value"] pour récupérer les couples clé-valeur des tableaux associatifs.
  • 75.
  • 76.
    76 Lecture d’un tableau -each()- <?PHP $tab=array("France"=>"Paris","GreatBritain"=>"London", "Marocco"=>"Rabat"); $tab["Deutschland"]="Berlin"; reset($tab); while($element=each($tab)) { echo "L'élément de clé {$element['key']} a la valeur {$element['value']}<br>"; } ?> • La notation {$element['key']} permet que l’élément soit évalué à l’intérieur de la chaîne de caractères. • Le fait d’écrire à la place $element['key'] provoque une erreur. • Pour vous assurer que le pointeur interne du tableau est positionné au début du tableau, vous pouvez appeler la fonction reset(),
  • 77.
    Lecture d’un tableau: for • multidimensionnel <?php $clients = array( array ("Lina", "Paris", "35"), array("Mohammed", "beni mellal", "22"), array("Berou","Saint Cloud","47") ); echo "<table border="1" width="100%" >"; // En-tête du tableau echo "<thead><tr> <th> Client </th><th> Nom </th><th> Ville </th><th> Age </th> </tr></thead>"; // Pied de tableau echo "<tfoot> <tr><th> Client </th><th> Nom </th><th> Ville</th><th>Age </th></tr></tfoot><tbody>"; 10:48 72 77
  • 78.
    Lecture d’un tableau -for- //Lecture des indices et des valeurs for ($i=0; $i<count($clients); $i++) { echo "<tr><td align="center"><b>$i </b></td>"; for($j=0; $j<count($clients[$i]); $j++) { echo "<td><b>", $clients[$i][$j]," </b></td>"; } echo "</tr>"; } echo "</tbody></table>"; ?> • La première parcourt les éléments du tableau $clients à l’aide d’un compteur $i. • la seconde boucle de compteur $j lit l’ensemble des 10:4 é 8 léments contenus dans ces tableaux. 73 78
  • 79.
    79 Lecture d’un tableau -while- <?php $clients= array(array ("Lina", "Paris", "35"), array("Mohammed", "Beni mellal", "22"), array("Berrou","Saint Cloud","47")); /* Ajout d’un élément */ $clients[7] = array("Duval","Marseille","76"); // Création du tableau HTML echo "<table border="1" width="100%" > <thead><tr> <th> Client </th><th> Nom</th><th> Ville </th><th> Age </th></tr></thead> <tfoot> <tr><th> Client </th><th> Nom </th><th> Ville </th><th> Age </th></tr></tfoot><tbody>"; // Lecture des éléments $i=0;
  • 80.
    80 Lecture d’un tableaumultidimensionnel: while while(isset($clients[$i])) { echo "<tr><td align="center"><b>$i </b></td>"; $j=0; while(isset($clients[$i][$j])) { echo "<td><b>",$clients[$i][$j]," </b></td>"; $j++; } echo "</tr>"; $i++; } Echo " </tbody> </table>" ; ?> • La fonction isset($var ) retourne la valeur FALSE si la variable $var existe mais n’est pas initialisée ou si elle a la valeur NULL, et la valeur TRUE si elle a une valeur quelconque. • L ’expression booléenne isset($tab[$i] [$j]) est évaluée de la même façon que précédemment. • Le compteur $j du nombre d’éléments est également initialisé à 0 avant le début de la boucle
  • 81.
    81 Lecture d’un tableaumultidimensionnel: each <?php $clients = array( array ("Leparc", "Paris", "35"), array("Duroc", "Vincennes", "22"), array("Denoël","Saint Cloud","47") ) ; $clients[7] = array("Duval","Marseille","76"); echo "<table border="1"><tbody>"; while($element=each($clients)) { echo "<tr><td> élément <b> $element[0] </b></td>"; while($val=each($element[1])) { echo "<td><b>",$val[1]," </b></td>"; } echo "</tr>"; } echo " </tbody> </table> <hr />"; ?>
  • 82.
    Lecture d’un tableaumultidimensionnel: each <?php $clients = array( array("client1"=>"Leparc","ville1"=>"Paris","age1"=>"35"), array("client2"=>"Duroc","ville2"=>"Vincennes","age2"=>"22"), array("client3"=>"Denoël","ville3"=>"Saint Cloud","age3"=>"47")); $clients[7] = array("client7"=>"Duval","ville7"=>"Marseille","age7"=>"76"); echo " <table border="1"><tbody> "; while($element=each($clients)) { echo "<tr><td> élément <b> $element[0] </b></td>"; while($val=each($element[1])) { echo "<td> clé :<b>",$val[0],"</b></td><td><b>",$val[1]," </b></td>"; } echo "</tr>"; } echo " </tbody> </table>"; ?> 10:48 77 82
  • 83.
    83 Lecture d’un tableauunidimensionnel: foreach • Lecture de tableau indicé sans récupération des indices <?php $tab=array("Paris","London", "Rabat"); echo "<H3>Lecture des valeurs des éléments </H3>"; foreach($tab as $ville) { echo "<b>$ville</b> <br>"; } echo"<hr>"; ?>
  • 84.
    84 Lecture d’un tableauunidimensionnel: foreach Lecture de tableau avec récupération des indices <?php echo "<h3>lecture des indices et des valeurs des éléments </h3>"; foreach($tab as $indice=>$ville) { echo "L'élément d'indice <b>$indice</b> a la valeur <b>$ville</b><br>"; } echo"<hr>"; ?>
  • 85.
    85 Lecture d’un tableauunidimensionnel: foreach • Lecture de tableau associatif avec récupération des clés <?php $tab2=array("France"=>"Paris","Great Britain"=>"London","België"=>"Brüssel"); echo "<h3>lecture des clés et des valeurs des éléments</h3>"; foreach($tab2 as $cle=>$ville) { echo "L'élément de clé <b>$cle</b> a la valeur <b>$ville</b> <br>"; } echo"<hr>"; ?>
  • 86.
    86 Lecture d’un tableaumultidimensionnel: foreach <?php $clients = array( "client 1"=>array("nom 1"=>"Leparc","ville 1"=>"Paris","age 1"=>"35"), "client 2"=>array("nom 2"=>"Duroc","ville 2"=>"Vincennes","age 2"=>"22"), "client 3"=>array("nom 3"=>"Denoël","ville 3"=>"St Cloud","age 3"=>"47")); $clients["client 7"] = array("nom 7"=>"Duval","ville 7"=>"Marseille","age 7"=>"76"); echo "<table border="1" width="100%" ><thead><tr> <th> Client </th><th> Nom </th> <th> Ville </th><th> Age </th></tr></thead><tbody>"; foreach($clients as $cle=>$tab) { echo "<tr><td align="center"><b> $cle </b></td>"; foreach($tab as $key=>$valeur) { echo "<td> $key : <b> $valeur </b></td>"; } echo "</tr>"; } echo " </tbody> </table> " ?>
  • 87.
    87 Lecture d’un tableaumultidimensionnel: foreach <?php $clients=array( array("Leparc","Paris","35"), array("Duroc","Vincennes","22"), array("Denoel","St Cloud","47"), array("Duval","Marseille","76") ); foreach($clients as list($nom,$ville,$age)) { echo "$nom $ville $age <br/>"; } ?>
  • 88.
    88 Manipuler des tableaux •sort(array &$array, int $flags ): bool • Type de drapeaux de tri : – SORT_REGULAR - Traiter les valeurs telles qu’elles sont – SORT_NUMERIC - compare les éléments numériquement – SORT_STRING - compare les éléments comme des chaînes de caractères – SORT_FLAG_CASE - peut être combiné (OU bit à bit) avec SORT_STRING ou SORT_NATURAL pour trier les chaînes sans tenir compte de la casse NB: rsort() - Trie un tableau en ordre décroissant
  • 89.
    89 Manipuler des tableaux •Exemple: <?php $fruits = array("lemon", "orange", "banana", "apple"); sort($fruits); foreach ($fruits as $key => $val) { echo "fruits[" . $key . "] = " . $val . "n";} ?> • L'exemple ci-dessus va afficher : – fruits[0] = apple – fruits[1] = banana – fruits[2] = lemon – fruits[3] = orange
  • 90.
  • 91.
  • 92.
    92 Manipuler des tableaux •Créer un tableau à partir d’une chaîne – Vous pouvez créer des tableaux en décomposant une chaîne de caractères en un ensemble de sous-chaînes, dont chacune devient un élément de tableau. – Le critère de coupure de la chaîne est un caractère quelconque à choisir par le programmeur. – Cette opération peut être effectuée au moyen de la fonction : array explode(string "coupe", string $chaine, [int nbmax]); – explode() retourne un tableau composé des sous-chaînes de $chaine créées avec le critère de coupure contenu dans la chaîne "coupe", l’entier nbmax facultatif donnant le nombre maximal de sous-chaîne désiré.
  • 93.
    93 Manipuler des tableaux •Exemple : <?php $chaine="La cigale et la fourmi"; $tab_chaine = explode(" ",$chaine); foreach($tab_chaine as $key => $val) echo "<br>* L’indice ".$key ." contient '".$val."'<br>"; ?> * L’indice 0 contient 'La' * L’indice 1 contient 'cigale' * L’indice 2 contient 'et' * L’indice 3 contient 'la' * L’indice 4 contient 'fourmi'
  • 94.
    94 Manipuler des tableaux •La fonction implode transforme un tableau en chaîne de caractères. On peut spécifier un séparateur pour les éléments. • echo implode(",", $tableau); imprime tous les éléments de $tableau, séparés par des virgules. • Exemple: <?php $tab= array("Hello", "World", "Beautiful","Day"); echo implode(" ",$tab); ?>
  • 95.
    95 Manipuler des tableaux •La fonction array_count_values(): $result = array_count_values($tab) – retourne le tableau associatif $result, ayant pour clés les valeurs du tableau $tab et pour valeur associée à chaque clé le nombre de fois que chacune apparaît dans le tableau $tab. – La fonction array_count_values() ne s’applique que si les éléments sont de type integer, double ou string mais pas de type array.
  • 96.
    96 Manipuler des tableaux •Extractions: – la fonction array_slice() permet d’effectuer divers types d’extractions. – Sa syntaxe est la suivante : • $sous_tab = array_slice(array $tab, int ind, int nb) • Elle retourne le sous-tableau dans la variable $sous_tab. – Si ind et nb sont positifs, le tableau $sous_tab contient nb éléments du tableau initial extrait en commençant à l’indice ind. – Par exemple, array_slice($tab,2,3) retourne un tableau comprenant trois éléments extraits à partir de l’indice 2.
  • 97.
    97 Manipuler des tableaux •Exemple: – array_slice($tab,-5, 4) retourne 4 éléments de $tab extraits en commençant au cinquième à partir de la fin. – array_slice($tab,2, -4) retourne tous les éléments à partir de l’indice 2 jusqu’à la fin, sauf les quatre derniers. – array_slice($tab,-5,-2) retourne 3 éléments compris entre les indices virtuels -5 compris et -2 non compris.
  • 98.
    98 Ajouter et enleverdes éléments • La fonction : – int array_push($tab, valeur1, valeur2,…, valeurN) ajoute en une seule opération les N éléments passés en paramètres à la fin du tableau $tab. – int array_unshift($tab, valeur1, valeur2,…,valeurN) ajoute également au début du tableau $tab les N éléments passés en paramètres. Les indices existants sont tous décalés de la valeur N.
  • 99.
    99 Ajouter et enleverdes éléments • La fonction : – array_pop($tab) qui supprime le dernier élément du tableau $tab et retourne cet élément s’il existe ou la valeur NULL dans le cas contraire, par exemple si le tableau est vide ou si le paramètre $tab n’est pas de type array. – array_shift($tab) supprime et retourne le premier élément du tableau $tab, – les fonctions array_push() et array_pop() se comporte comme une pile dotée respectivement de fonctions d’empilement et de dépilement.
  • 100.
    100 Ajouter et enleverdes éléments – La fonction unset() supprime un élément d’indice ou de clé quelconque d’un tableau en précisant explicitement le nom de l’élément et son indice ou sa clé. – Exemple : • unset($tab[4]) supprime l’élément d’indice 4 du tableau $tab • unset($tab["quatre"]) supprime l’élément dont la clé est "quatre".
  • 101.
    101 Ajouter et enleverdes éléments • La fonction array_unique($tab) – retourne un nouveau tableau ne contenant que la première occurrence de chaque valeur présente plusieurs fois dans le tableau $tab. – Les indices ou les clés associés à chaque élément sont conservés, – le tableau retourné comporte des «trous » dans la suite des indices si ces derniers sont numériques.
  • 102.
    102 Ajouter et supprimerdes éléments Exemple: <?php $tab =array("Jack","Paul","Pierre", "Paul","Jack","Paul"); $tab2 = array_unique($tab); print_r($tab2); ?>
  • 103.
    103 Fusion de tableaux –Lafonction $tab = array_merge($tab1,$tab2,…,$tabN) retourne dans $tab l’ensemble des éléments présents dans les tableaux $tab1, $tab2, …, $tabN. – Exemple: <?php echo "Tableaux indicés <br>"; $tab1= array("Paris","Lyon","Marseille"); $tab2 = array("Nantes","Orléans","Tours","Paris"); $tab = array_merge($tab1,$tab2); echo "array_merge donne: "; print_r($tab); echo "<hr />"; ?>
  • 104.
    104 Fusion de tableaux •La fonction array_intersect($tab1,$tab2) – retourne un tableau contenant tous les éléments communs aux tableaux $tab1 et $tab2. – Les indices associés aux valeurs du tableau retourné comme résultat correspondent à ceux du tableau passé en premier paramètre.
  • 105.
    105 Fusion de tableaux •la fonction array_diff($tab1,$tab2) – retourne un tableau contenant les éléments présents dans le premier paramètre mais pas dans le second. – Comme pour la soustraction de nombres, il est logique que l’inversion des paramètres ne fournisse pas le même résultat. – Les indices associés aux valeurs dans les tableaux d’origine sont conservés.
  • 106.
    106 Fusion de tableaux •Exemple: <?php $tab1=array("Blanc","Jaune","Rouge","Vert","Bleu","Noir"); $tab2=array("Bleu","Rouge","Violet","Noir","Jaune","Orange"); echo "Intersection de $tab1 et $tab2 : "; $tab3=array_intersect($tab1,$tab2); print_r($tab3); echo"<br />"; echo "Intersection de $tab2 et $tab1 : "; $tab4= array_intersect($tab2,$tab1); print_r($tab4); echo"<hr />"; $tab5= array_diff($tab1,$tab2); echo "Différence de $tab1 et $tab2 : "; print_r($tab5); echo"<br />"; $tab6= array_diff($tab2,$tab1); echo "Différence de $tab2 et $tab1 : "; print_r($tab6); echo"<br />"; ?>
  • 107.
  • 108.
    108 Les fonctions • Unefonction correspond à une série cohérente d’instructions qui ont été créées pour effectuer une tâche précise. • On distingue entre: – Les fonctions internes ou prêtes à l’emploi; – Les fonctions définies par l’utilisateur; • la fonction interne gettype() a pour rôle de renvoyer le type d’une variable.
  • 109.
    109 Les fonctions • Définirune fonction – Commencez par définir l’en-tête de la fonction à l’aide du mot-clé function suivi du nom de la fonction et de parenthèses. – Les parenthèses qui suivent le nom de la fonction peuvent contenir différents paramètres . – Ouvrez un bloc de code limité par des accolades contenant l’ensemble du code de définition de la fonction. – Si la fonction doit retourner une valeur, il faut faire précéder la variable ou l’expression qui contient cette valeur du mot-clé return.
  • 110.
    110 Les fonctions • Structuregénérale : function mafonction($x, $y,...) { //code de définition de la fonction return $var; } • Il est préférable de définir les fonctions en début de script, • il est préférable de les inclure dès le début du script qui les utilise, et ce au moyen de l’instruction include() ou require().
  • 111.
    111 Les fonctions • Typageet valeur par défaut: – Il est possible de définir un typage des paramètres et de la valeur de retour d’une fonction. – Les types qu’on peut exiger sont int, float, string, bool, array, un nom de classe et d’interface. – vous pouvez donner des valeurs par défaut aux paramètres de la fonction. Il suffit pour cela d’affecter une valeur au paramètre dans la définition de la fonction
  • 112.
    112 Les fonctions • Exemple: <?php functionsomme( int $a, int $b) : float { return $a+$b; } echo somme(5, 9); echo somme('5.4', 9.7); //Pas de problème, retourne 14 /*5.4 et 9.7 sont convertis en entiers 5 et 9 donc retourne 14*/ /*La chaîne '5.4' est convertie en entier 5 donc affiche 14 */ /* FALSE est évalué à 0 donc affiche 5*/ / * TRUE est évalué à 1 donc affiche 6*/ echo somme('5.4', 9); echo somme(5.4, FALSE); echo somme(5.4, TRUE); ?>
  • 113.
    113 Les fonctions • Lestypes ne sont pas nécessairement les mêmes dans la définition d’une fonction, il y aura donc un transtypage. • En typage strict, la fonction va exiger le strict respect du type de chaque paramètre défini dans la fonction, sinon il se produit une erreur. • Pour choisir le typage strict, il faut placer une directive en tête du fichier qui contient la définition de la fonction, sous la forme : declare(strict_types=1); doit surtout être présente principalement sur le fichier PHP appelant
  • 114.
    Les fonctions • Passerdes arguments par référence – Si on veut que une fonctions puissent modifier la valeur des variables qu’on leur passe en argument, il va falloir passer ces arguments par référence. – Pour cela, il suffit d’ajouter le signe & devant le paramètre en question dans la définition de la liste des paramètres de la fonction. <?php $a=10; $b=20; echo 'Avant l'echange <br>'; Echo "$a=$a "," $b=$b".'<br>'; function echange(&$var1, &$var2) { $var3= $var1; $var1=$var2 ; echo '<br> Apres l'echange '; echange($a,$b); Echo "<br>$a=$a " ," $b=$b"; $var2=$var3; } ?> 10:48 107 11 4
  • 115.
    115 Les fonctions particulières •La fonction: – integer func_num_args(): func_num_args() s’utilise sans argument et seulement dans le corps même d’une fonction. Elle retourne le nombre d’arguments passés à cette fonction. – divers func_get_arg (integer $N) retourne la valeur du paramètre passé à la position $N. le premier paramètre a l’indice 0. – array func_get_args() s’utilise sans paramètre et retourne un tableau indicé contenant tous les paramètres passés à la fonction .
  • 116.
    116 Les fonctions particulières •Exemple: <?php // Utilisation de func_num_args() et func_get_arg() function somme() { $som =0; // Détermine le nombre d'arguments $n=func_num_args(); for($i=0;$i<$n;$i++) { echo func_get_arg($i); ($i==$n-1)?print(" = "):print(" + "); $som +=func_get_arg($i); } return $som; } // Appels de la fonction somme() echo " somme des nombres :", somme(5,6,7,8,11,15),"<br />"; $a=3;$b=5;$c=7;$d=9; echo" somme de ",somme($a,$b,$c,$d),"<hr />"; ?>
  • 117.
    117 Les fonctions • L’opérateur… – Pour définir des fonctions qui accepte un nombre variable d’arguments, il suffit d’ajouter l’opérateur … avant la liste des paramètres dans la définition de la fonction . – Exemple : <?php function prod(...$tab) {$a =1; foreach($tab as $nb) $a *=$nb; return $a; } echo "Produit ", prod(2,3,5,7), "<br>" ?>
  • 118.
    118 Les fonctions • L’instructionyield permet de retourner plusieurs valeurs et de les lire via une boucle foreach comme s’il s’agissait d’un tableau. • yield a l’avantage de consommer beaucoup moins de mémoire sur le serveur . • Exemple: <?php function suite($min,$max,$pas) { for($i=$min;$i<=$max;$i+=$pas) { yield $i; } } echo "Suite : "; foreach(suite(13, 50,5)as $nb) {echo $nb, " /// ";} ?>
  • 119.
    119 Les fonctions • lesvariables peuvent avoir deux portées différentes : soit une portée globale, soit une portée locale. • Toute variable définie en dehors d’une fonction a une portée globale. Elle est accessible globalement sauf dans les espaces locaux d’un script. • Une variable définie à l’intérieur d’une fonction va avoir une portée locale à cette fonction, elle sera détruite dès la fin de l’exécution de la fonction.
  • 120.
    120 Les fonctions • Pouraccéder à une variable de portée globale depuis un espace local, on utilise le mot clef global avant la déclaration des variables qu’on souhaite utiliser dans notre fonction. • Exemple <?php $x = 10; function portee(){ global $x; echo 'La valeur de $x globale est : ' .$x. '<br>'; $x = $x + 5; //On ajoute 5 à la valeur de $x } portee(); echo '$x contient maintenant : ' .$x; ?> • La valeur de $x globale est : 10 $x contient maintenant : 15
  • 121.
    121 Les fonctions • Pourconserver la valeur finale d’une variable locale pour pouvoir s’en resservir lors d’un prochain appel à la fonction, nous utilisons le mot clef static devant la déclaration initiale de la variable. • Exemple: <?php function compteur(){ static $x = 0; echo '$x contient la valeur : ' .$x. '<br>'; $x++;} compteur(); compteur(); compteur(); compteur(); compteur(); ?> $x contient la valeur : 0 $x contient la valeur : 1 $x contient la valeur : 2 $x contient la valeur : 3 $x contient la valeur : 4
  • 122.
    122 Les fonctions • Créerou définir une constante – Pour définir une constante en PHP, nous allons pouvoir utiliser la fonction define() ou le mot clef const. – A la différence des variables, nous ne devrons pas préfixer le nom d’une constante avec le signe $. • Exemple: <?php define('DIX', 10); // ou bien const DIX=10; echo 'La constante DIX stocke la valeur ' .DIX; ?> La constante DIX stocke la valeur 10
  • 123.
    123 Les fonctions • Lesconstantes magiques se distinguent des autres puisque leur valeur va changer en fonction de l’endroit dans le script où elles vont être utilisées. • Les constantes magiques sont reconnaissables par le fait que leur nom commence par deux underscores et se termine de la même manière.
  • 124.
    124 Les fonctions Nom dela constante Description FILE Contient le chemin complet et le nom du fichier DIR Contient le nom du dossier dans lequel est le fichier LINE Contient le numéro de la ligne courante dans le fichier FUNCTION Contient le nom de la fonction actuellement définie ou {closure} pour les fonctions anonymes CLASS Contient le nom de la classe actuellement définie METHOD Contient le nom de la méthode actuellement utilisée NAMESPACE Contient le nom de l’espace de noms (« namespace ») courant TRAIT Contient le nom du trait (incluant le nom de l’espace de noms dans lequel il a été déclaré) ClassName::class Contient le nom entièrement qualifié de la classe
  • 125.
    Les fonctions • Exemple: <?php //Affiche le numéro de la ligne où la constante a été appelée (dans le code) echo 'Numéro de ligne : ' . LINE . '<br>'; //Affiche le chemin du ficher et son nom echo 'Chemin complet du fichier : ' . FILE . '<br>'; //Affiche le nom du dossier qui contient le fichier echo 'Dossier contenant le fichier : ' . DIR . '<br>'; //Affiche à nouveau la ligne où la constante a été appelée echo 'Numéro de ligne : ' . LINE . '<br>'; //Renvoie le nom de la fonction depuis laquelle la constante est appelée function test(){ echo 'Constante appelée depuis la fonction ' . FUNCTION ; } test(); ?> 10:48 Numéro de ligne : 3 Chemin complet du fichier : C:wampwwwPROJETformat.php Dossier contenant le fichier : C:wampwwwPROJET Numéro de ligne : 9 Constante appelée depuis la fonction test 118 12 5
  • 126.
  • 127.
    127 La date enPHP • Le Timestamp UNIX Le format Timestamp UNIX est un format de mesure de date très utilisé en programmation. Le Timestamp UNIX représente le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit (heure GMT) et jusqu’à une date donnée. • Pour obtenir le Timestamp actuel en PHP, nous allons utiliser la fonction time(). • Exemple: <?php echo 'Timestamp actuel : ' .time(). '<br>'; ?>
  • 128.
    128 La date enPHP • Pour obtenir le Timestamp UNIX lié à une date donnée, nous allons pouvoir utiliser: – la fonction mktime() qui retourne le Timestamp UNIX d’une date, – la fonction gmmktime() qui retourne le Timestamp UNIX d’une date GMT. – mktime (heure, minute, seconde, mois, jour, année) nécessite une série de nombres en arguments: 1) L’heure ; 2) Les minutes ; 3) Les secondes ; 4) Le jour ; 5) Le mois ; 6) L’année. – tous les arguments manquants sont utilisés avec la valeur courante de l'heure et du jour.
  • 129.
    129 La date enPHP • Exemple: <?php $t1 = mktime(8, 30, 0, 1, 25, 2021); $gmt1 = gmmktime(8, 30, 0, 1, 25, 2021); Echo $t1. '<br>'; Echo $gmt1. '<br>'; ?>
  • 130.
    130 La date enPHP • la fonction strtotime() transforme une chaine de caractères de format date ou temps en Timestamp. • Exemple: <?php $stt1 = strtotime('2021/05/4 08:30:00'); $stt2 = strtotime('2021/05/4'); $stt3 = strtotime('next friday'); $stt4 = strtotime('2 days ago'); $stt5 = strtotime('+1 day'); echo $stt1,'<br>'; echo $stt2,'<br>'; echo $stt3,'<br>'; echo $stt4,'<br>'; echo $stt5,'<br>'; ?> 1620117000 1620086400 1620345600 1619995384 1620254584
  • 131.
    La date enPHP • Pour obtenir une date , on utilise la fonction getdate(). Elle accepte un Timestamp en argument et retourner le tableau associatif suivants: 10:4 8 12 4 Clef Valeur associée seconds Les secondes minutes Les minutes hours L’heure mday Le numéro du jour dans le mois wday Le numéro du jour de la semaine (dimanche = 0, lundi = 1, samedi = 6 pour nous) mon Le numéro du mois (de 1 à 12) year L’année complète yday Le jour de l’année weekday Le jour de la semaine sous forme de texte (en anglais) month Le mois de l’année écrit en toutes lettres (en anglais) 0 Le Timestamp relative à la date renvoyée 13 1
  • 132.
    125 La date enPHP • Exemple : <?php $tab=getdate(); echo "<br> On est le ". $tab['mday']. '/'.$tab['mon']. '/'. $tab['year']. ", il est ".$tab["hours"]. " heures ".$tab["minutes"]." minutes ".$tab["seconds"]." seconds."; ?> On est le 4/5/2021, il est 23 heures 7 minutes 5 seconds. 13 2
  • 133.
    127 La date enPHP • La fonction date() permet d’obtenir une date selon le format de notre choix. • Le tableau suivant donne les caractères les plus couramment utilisés pour formater une date: Caractère Signification d Représente le jour du mois en deux chiffres (entre 01 et 31) j Représente le jour du mois en chiffres sans le zéro initial (de 1 à 31) D Représente le jour de la semaine en 3 lettres (en anglais) l Représente le jour de la semaine en toutes lettres (en anglais) N Représente le jour de la semaine en chiffre au format ISO-8601 (lundi = 1, dimanche = 7)
  • 134.
    128 La date enPHP Caractère Signification w Représente le jour de la semaine en chiffre (dimanche = 0, samedi = 6) z Représente le jour de l’année de 0 (1er janvier) à 365 W Représente le numéro de la semaine au format ISO-8601 (les semaines commencent le lundi) m Représente le mois de l’année en chiffres avec le zéro initial (de 01 à 12) n Représente le mois de l’année de chiffres sans le zéro initial (de 1 à 12) M Représente le mois en trois lettres en anglais (Jan, Feb…) F Représente le mois en toutes lettres en anglais t Représente le nombre de jours contenus dans le mois (de 28 à 31) Y Représente l’année sur 4 chiffres (ex : 2019) y Représente l’année sur 2 chiffres (ex : 19 pour 2019)
  • 135.
    129 La date enPHP Caractère Signification L Renvoie 1 si l’année est bissextile, 0 sinon a et A Ajoute « am » ou « pm » (pour a) ou « AM » ou « PM » (pour A) à la date h Représente l’heure au format 12h avec le zéro initial g Représente l’heure au format 12h sans zéro initial H Représente l’heure au format 24h avec le zéro initial G Représente l’heure au format 24h sans le zéro initial i Représente les minutes avec le zéro initial s Représente les seconds avec le zéro initial
  • 136.
    130 La date enPHP Caractère Signification v Représente les millisecondes avec le zéro initial O et P Indique la différence d’heures avec l’heure GMT sans deux points (pour O, ex : +0100) ou avec deux points (pour P, ex : +01:00) I (i majuscule) Renvoie 1 si l’heure d’été est activée, 0 sinon c Représente la date complète au format ISO 8601 (ex : 2019-01-25T12:00:00+01:00) r Représente la date complète au format RFC 2822 (ex : Fri, 25 Jan 2019 12 :00 :00 +0100) Z Représente le décalage horaire en secondes par rapport à l’heure GMT
  • 137.
    131 La date enPHP • Exemple: <?php echo date('d/m/Y'). '<br>'; echo date('l d m Y h:i:s'). '<br>'; echo date('c'). '<br>'; echo date('r'). '<br>'; ?> 04/05/2021 Tuesday 04 05 2021 11:28:35 2021-05-04T23:28:35+00:00 Tue, 04 May 2021 23:28:35 +0000
  • 138.
    132 La date enPHP • Transformer une date en français – Pour transformer une date en anglais vers du français, nous utilisons les fonctions setlocale() et strftime(). – Nous allons passer à cette fonction des caractères qui vont représenter des parties de date: Caractère Signification %a Représente le jour de la semaine en trois lettres en anglais %A Représente le jour de la semaine en toutes lettres en anglais %u Représente le jour de la semaine en chiffre au format ISO-8601 (lundi 1, dimanche = 7) %w Représente le jour de la semaine en chiffre (dimanche = 0, samedi = 6) %d Représente le jour du mois en deux chiffres (entre 01 et 31)
  • 139.
    133 La date enPHP Caractère Signification %j Représente le jour de l’année avec les zéros de 001 à 366 %U Représente le numéro de la semaine de l’année en ne comptant que les semaines pleines %V Représente le numéro de la semaine de l’année en suivant la norme ISO-8601 (si au moins 4 jours d’une semaine se situent dans l’année alors la semaine compte) %m Représente le mois sur deux chiffres de 01 à 12 %b Représente le nom du mois en lettres en abrégé %B Représente le nom complet du mois %y Représente l’année sur deux chiffres %Y Représente l’année sur 4 chiffres %H Représente l’heure, de 00 à 23
  • 140.
    134 La date enPHP Caractère Signification %k Représente l’heure de 0 à 23 %I (i majuscule) Représente l’heure de 01 à 12 %M Représente les minutes de 00 à 59 %S Représente les secondes de 00 à 59 %T Identique à %H:%M:%S %D Identique à %m/%d/%y %x Représente la date sans l’heure au format préféré en se basant sur la constant locale %c Affiche la date et l’heure basées sur la constant locale
  • 141.
    La date enPHP 10:48 135 Exemple: <?php echo strftime('%A %d %B %Y %I:%M:%S'). '<br>'; setlocale(LC_TIME, ['fr', 'fra', 'fr_FR']); echo strftime('%A %d %B %Y %I:%M:%S'). '<br>'; echo strftime('%x'). '<br>'; echo strftime('%c'). '<br>'; ?> Tuesday 04 May 2021 06:23:3 mardi 04 mai 2021 06:23:30 04/05/2021 04/05/2021 18:23:30 14 1
  • 142.
    136 La date enPHP • Pour comparer des dates, nous allons privilégier la comparaison des Timestamp liés aux dates. • On procède en deux étapes : – on va commencer par récupérer les Timestamp liés aux dates. – puis on va comparer les Timestamp. • Exemple: <?php $d1 = '25-01-2019'; $tmstp1 = strtotime($d1); $d2 = '30-June 2018'; $tmstp2 = strtotime($d2); if($tmstp1 < $tmstp2){echo 'Le ' .$d1. ' est avant le ' .$d2; } elseif($tmstp1 == $tmstp2) { echo 'Les deux dates sont les mêmes'; } else{ echo 'Le ' .$d2. ' est avant le ' .$d1; } ?> Le 30-June 2018 est avant le 25-01-2019
  • 143.
    137 La date enPHP • Pour vérifier la validité d’une date PHP, on utilise la fonction checkdate() qui va accepter trois chiffres en arguments : – le premier représente le mois – le deuxième représente le jour – le troisième représente l’année. • Si checkdate() valide la date passée, alors elle renverra le booléen true. Dans le cas contraire, elle renverra false.
  • 144.
    138 La date enPHP Tester la validité d’une date <?php if(checkdate(1,25,2019)) { echo 'Le 25 janvier 2019 est une date valide <br>';} if(checkdate(1,35,2019)) { echo 'Le 35 janvier 2019 est une date valide <br>'; } if(checkdate(2,29,2015)) { echo 'Le 29 février 2015 est une date valide <br>'; } if(checkdate(2,29,2016)) { echo 'Le 29 février 2016 est une date valide <br>'; } ?>
  • 145.
    La date enPHP • Validité d’un format de date locale – La fonction strptime() retourne false en cas d’erreur sur la date, sinon renvoie un tableau de la forme suivante : 10:4 8 13 9 Type de données Signification tm_sec Représente les secondes tm_min Représente les minutes tm_hour Représente l’heure de 0 à 23 tm_mday Le jour du mois en chiffres sans le zéro initial tm_mon Représente le mois sous forme de chiffres (janvier = 0, décembre = 11) tm_year Le nombre d’années écoulées depuis 1900 tm_wday Le numéro du jour de la semaine (Dimanche = 0, Samedi= 6) tm_yday Le jour de l’année en chiffres (1er janvier = 0) unparsed La partie de la date qui n’a pas été reconnue 14 5
  • 146.
    Exercices • Exercice 1 Calculezvotre âge à l’instant en cours à la seconde près. • Exercice 2 Vérifiez si la date du 29 février 1962 a existé. • Exercice 3 Quel jour de la semaine était le 3 mars 1993 ? Affichez le résultat en français. 10:48 140 14 6
  • 147.
  • 148.
    PHP orienté objet •Classes, propriétés et méthodes: <?php class Utilisateur { Public $username; Public $password; public function getNom(){return $this->username;} public function setNom($name){ $this->username = $name;} public function setPasse($pass){$this->password= $pass;} } ?> • Les variables créées dans les classes sont appelées des propriétés, • Les fonctions définies à l’intérieur d’une classe sont appelées des méthodes, • Les méthodes permettent d’obtenir ou de mettre à jour les valeurs de nos propriétés, 14 8
  • 149.
    PHP orienté objet •Le mot clef public signifie qu’on va pouvoir accéder à nos propriétés depuis l’intérieur et l’extérieur de notre classe. • La pseudo-variable $this dans le code de notre méthode sert à faire référence à l’objet couramment utilisé. • Créons un objet $Adam à partir de la classe Utilisateur puis définissons ensuite des valeurs spécifiques pour les propriétés $username et $password pour cet objet. <?php $Adam = new Utilisateur(); $ Adam ->setNom(‘Adam'); $ Adam ->setPasse(123); echo $Adam->getNom(). '<br>'; ?> 14 9
  • 150.
    PHP orienté objet •On se sert de la même classe pour instancier plusieurs d’objets. • Les objets vont partager les propriétés et méthodes définies dans la classe qu’on va pouvoir utiliser de manière indépendante avec chaque objet. 15 0
  • 151.
    Constructeur et destructeur •Le constructeur d’une classe est une méthode qui va être appelée automatiquement à chaque fois qu’on va instancier une classe. • Le constructeur nous permet d’initialiser des propriétés dès la création d’un objet, • La méthode destructeur va permettre de nettoyer les ressources avant que PHP ne libère l’objet de la mémoire, • Le destructeur va être appelée automatiquement par le PHP juste avant qu’un objet ne soit détruit. <?php class Utilisateur{ protected $username; protected $password; public function construct($n, $p){ $this->username = $n; $this->password = $p; } public function destruct(){ /*Du code à exécuter*/ } public function getNom(){ return $this->username; } } $Adam= new Utilisateur(‘Adam', 123); echo $Adam->getNom(). '<br>'; ?> 15 1
  • 152.
    Le principe d’encapsulation •L’encapsulation correspond au groupement des données (propriétés) et des méthodes permettant de les manipuler au sein d’une classe. • L’encapsulation permet d’empêcher que certaines propriétés ne soient manipulées depuis l’extérieur de la classe. • Pour définir qui va pouvoir accéder aux différentes propriétés et méthodes de nos classes, nous allons utiliser des niveaux de visibilité qui vont être représentés par les mots clefs : – public, – Private, – protected. 15 2
  • 153.
    Accessibilité des propriétéset des méthodes • public: Permet l’accès universel à la propriété, aussi bien dans la classe que dans tout le script, y compris pour les classes dérivées • Protected: La propriété n’est accessible que dans la classe qui l’a créée et dans ses classes dérivées, • Private: C’est l’option la plus stricte : l’accès à la propriété n’est possible que dans la classe et nulle part ailleurs. 15 3
  • 154.
    Classes étendues ethéritage • Une classe « fille » hérite de toutes les propriétés et méthodes de son «parent », • Elle peut définir de nouvelles propriétés et méthodes spécifiques à lui. • Par exemple, la classe Admin va étendre la classe Utilisateur précédente, elle rajoute une propriété $ban qui va contenir la liste des utilisateurs bannis ainsi que deux méthodes setBan() et getBan(). • La classe Admin peut accéder à toutes les méthodes et aux propriétés de la classe Utilisateur qui n’ont pas été définies avec le mot clef private. 15 4
  • 155.
    Classes étendues ethéritage • Exemple: <?php class Admin extends Utilisateur{ protected $ban; public function setBan($b){ public function getBan(){ $this->ban[] .= $b; } echo 'Utilisateurs bannis par '.$this->username. ' : '; foreach($this->ban as $valeur){ echo $valeur .', '; } } } $Adam = new Admin(‘Adam', 123); $mathilde = new Utilisateur('Mathilde', ‘abc’); echo $Adam->getNom(). '<br>'; echo $mathilde->getNom(). '<br>'; $Adam->setBan('Paul'); $Adam->setBan('Jean'); echo $Adam->getBan(); ?> 15 5
  • 156.
    La surcharge depropriétés et de méthodes • On dit qu’on « surcharge » une propriété ou une méthode d’une classe mère lorsqu’on la redéfinit dans une classe fille. • Pour surcharger une propriété ou une méthode, il va falloir la redéclarer en utilisant le même nom, il faudra également que la nouvelle définition possède le même nombre de paramètres. • Par exemple, on surcharge la méthode getNom() de notre classe parent Utilisateur dans notre classe étendue Admin. 15 6
  • 157.
    La surcharge depropriétés et de méthodes • La méthode getNom() est redéfinit dans la classe fille, <?php class Admin extends Utilisateur{ protected $ban; public function getNom(){ return strtoupper($this->username); } public function setBan($b){ $this->ban[] .= $b; } public function getBan(){ echo 'Utilisateurs bannis par '.$this->user_name. ' : '; foreach($this->ban as $valeur){ echo $valeur .', '; } } } ?> 15 7
  • 158.
    Propriété et méthodestatiques • Une propriété ou une méthode statique est une propriété ou une méthode qui ne va pas appartenir à une instance de classe mais qui va appartenir à la classe dans laquelle elle a été définie, • Les méthodes et propriétés statiques vont donc avoir la même définition et la même valeur pour toutes les instances d’une classe, • Nous allons pouvoir accéder à ces éléments sans avoir besoin d’instancier la classe, • L’accès à une propriété statique depuis un objet n’est possible que par méthode statique. 15 8
  • 159.
    Propriété et méthodestatiques • Exemple: classe Utilisateur <?php class Utilisateur{ protected $username; protected $user_region; protected $prix_abo; protected $password; /*si vous utilisez une version PHP < PHP 7.1, ce code ne fonctionnera pas*/ public const ABONNEMENT = 15; public function construct($n, $p, $r){ $this->username = $n; $this->password = $p; $this->user_region = $r; } public function destruct(){ /*Du code à exécuter */} public function getNom(){ echo $this->username; } public function setPrixAbo(){ /*On calcule un prix d'abonnement différent selon les profils des utilisateurs*/ if($this->user_region === 'Sud') { return $this->prix_abo = self::ABONNEMENT / 2; } else{ return $this->prix_abo = self::ABONNEMENT; } } public function getPrixAbo(){ echo $this->prix_abo; } } ?> 15 9
  • 160.
    Propriété et méthodestatiques • Exemple: classe Admin <?php class Admin extends Utilisateur{ protected static $ban; public const ABONNEMENT = 5; public function construct($n, $p, $r){ $this->username = strtoupper($n); $this->password = $p; $this->user_region = $r; } public function setBan($b){ self::$ban[] .= $b; } public function getBan(){ echo 'Utilisateurs bannis : '; foreach (self::$ban as $valeur){ echo $valeur .', ';} } public function setPrixAbo(){ if($this->user_region === 'Sud'){return $this->prix_abo = self::ABONNEMENT;} else{return $this->prix_abo = parent::ABONNEMENT / 2;} } } ?> 16 0
  • 161.
    155 Propriété et méthodestatiques • Exemple: <?php require 'utilisateur.php'; require 'admin.php'; $Adam = new Admin(‘Adam', 'abcdef', 'Sud'); $mathilde = new Admin('Math', 123456, 'Nord'); $florian = new Utilisateur('Flo', 'flotri', 'Est'); $Adam->setBan('Paul'); $mathilde->setBan('Thomas'); $Adam->getBan(); echo '<br>'; $mathilde->getBan(); ?>
  • 162.
    156 Les classes etméthodes abstraites • Une classe abstraite est une classe qui ne va pas pouvoir être instanciée directement, • Une méthode abstraite est une méthode dont seule la signature (le nom et les paramètres) est déclarée, • Dès qu’une classe possède une méthode abstraite, il va falloir la déclarer comme classes abstraite, • Lors de l’héritage d’une classe abstraite, les méthodes déclarées comme abstraites dans la classe parent doivent obligatoirement être définies dans la classe enfant avec des signatures correspondantes.
  • 163.
    157 Les classes etméthodes abstraites • Classe abstraite <?php abstract class Utilisateur{ protected $username; protected $user_region; protected $prix_abo; protected $password; public const ABONNEMENT = 15; public function destruct(){ /*Du code à exécuter*/ } abstract public function setPrixAbo(); public function getNom(){ public function getPrixAbo(){ echo $this->user_name; } echo $this->prix_abo; } } ?>
  • 164.
    158 Étendre des classesabstraites • Classe Admin <?php class Admin extends Utilisateur{ protected static $ban; public function construct($n, $p, $r){ $this->username = strtoupper($n); $this->password= $p;$this->user_region = $r; } public function setBan($b){self::$ban[] .= $b; } public function getBan(){ echo 'Utilisateurs bannis : '; foreach( self::$ban as $valeur){ echo $valeur .', '; } } public function setPrixAbo(){ if($this->user_region === 'Sud'){ return $this->prix_abo = parent::ABONNEMENT / 6; }else{return $this->prix_abo = parent::ABONNEMENT / 3;} } } ?>
  • 165.
    159 Étendre des classesabstraites • Classe Abonne <?php class Abonne extends Utilisateur{ public function construct($n, $p, $r){ $this->username = $n; $this->password = $p; $this->user_region = $r; } public function setPrixAbo(){ if($this->user_region === 'Sud'){ return $this->prix_abo = parent::ABONNEMENT / 2; }else{ return $this->prix_abo = parent::ABONNEMENT;} } } ?>
  • 166.
    Étendre des classesabstraites Exemple <?php require 'utilisateur.php'; require 'admin.php'; require 'abonne.php'; $Adam = new Admin(‘Adam', 123, 'Sud'); $florian = new Abonne('Flo', 'flotri', 'Est'); $Adam->setPrixAbo(); $florian->setPrixAbo(); echo 'Prix de l'abonnement pour '; $Adam->getNom(); echo ' : '; $Adam->getPrixAbo(); echo '<br>Prix de l'abonnement pour '; $florian->getNom(); echo ' : '; $florian->getPrixAbo(); ?> 10:48 160 16 6
  • 167.
    161 Les interfaces • Lesinterfaces ont un but similaire aux classes abstraites, • L’un des intérêts principaux liés à la définition d’une interface est de fournir un plan général pour les développeurs , • Les développeurs vont implémenter l’interface et doivent suivre le plan donné par l’interface, • Une interface doit être implémenter, c’est-à-dire créer des classes dérivées à partir de celle-ci.
  • 168.
    162 Les interfaces Les deuxdifférences majeures entre les interfaces et les classes abstraites sont les suivantes : 1. Une interface ne peut contenir que les signatures des méthodes ainsi qu’éventuellement des constantes mais pas de propriétés. Cela est dû au fait qu’aucune implémentation n’est faite dans une interface : une interface n’est véritablement qu’un plan ; 2. Une classe ne peut pas étendre plusieurs classes à cause des problèmes d’héritage. En revanche, une classe peut tout à fait implémenter plusieurs interfaces.
  • 169.
    163 Les interfaces • Définiret implémenter une interface – On définit une interface de la même manière qu’une classe mais en utilisant interface à la place de class. – Interface Utilisateur: <?php interface Utilisateur{ public const ABONNEMENT = 15; public function getNom(); public function setPrixAbo(); public function getPrixAbo(); } ?>
  • 170.
    164 Les interfaces • Onimplémente une interface de la même manière que lors de la création d’une classe étendue mais cette fois-ci on utilise le mot clef implements à la place de extends. • pour accéder à une constante d’interface, il faut préciser le nom de l’interface devant l’opérateur de résolution de portée.
  • 171.
    165 Les interfaces • ClasseAbonne: <?php class Abonne implements Utilisateur{ protected $username; protected $user_region; protected $prix_abo; protected $password; public function construct($n, $p, $r){ $this->username = $n; $this->password = $p; $this->user_region = $r; } public function getNom(){ echo $this->user_name; } public function getPrixAbo(){ echo $this->prix_abo; } public function setPrixAbo(){ if($this->user_region === 'Sud'){ return $this->prix_abo = Utilisateur::ABONNEMENT/2; }else{ return $this->prix_abo = Utilisateur::ABONNEMENT; } } } ?>
  • 172.
    166 Les interfaces • ClasseAdmin: <?php class Admin implements Utilisateur{ protected $username; protected $user_region; protected $prix_abo; protected $password; protected static $ban; public function construct($n, $p, $r){ $this->useename = strtoupper($n); $this->password = $p; $this->user_region = $r; } public function getNom(){ echo $this->username; } public function getPrixAbo(){ echo $this->prix_abo; } public function setBan($b){ self::$ban[] .= $b; } public function getBan(){ echo 'Utilisateurs bannis : '; foreach(self::$ban as $valeur){ echo $valeur .', '; } } public function setPrixAbo(){ if($this->user_region === 'Sud'){ return $this->prix_abo = Utilisateur::ABONNEMENT / 6; }else{ return $this->prix_abo = Utilisateur::ABONNEMENT/ 3; } } } ?>
  • 173.
    167 Les interfaces • Exempled’utilisation: <?php require 'utilisateur.php'; require 'admin.php'; require 'abonne.php'; $Adam = new Admin(‘Adam', 'abc', 'Sud'); $florian = new Abonne('Flo', 'flotri', 'Est'); $Adam->setPrixAbo(); $florian->setPrixAbo(); echo 'Prix de l'abonnement pour '; $Adam->getNom(); echo ' : '; $Adam->getPrixAbo(); echo '<br>Prix de l'abonnement pour '; echo ' : '; echo '<br>Prix de l'abonnement pour '; $florian->getNom(); echo ' : '; $florian->getPrixAbo(); ?>
  • 174.
    168 Les traits • EnPHP, une classe fille ne peut hériter que d’une seule classe mère. • Que faire si une classe a besoin d’hériter de plusieurs classes mères ? • Les traits sont utilisés pour déclarer les méthodes qui peuvent être utilisées dans plusieurs classes. • Ces méthodes peuvent être simple ou abstraites peuvent avoir n’importe quel modificateur d’accès (public, private, or protected).
  • 175.
    169 Les traits • Letrait propose plusieurs avantages : – N’importe quelle classe peut utiliser un trait – Une classe peut utiliser plusieurs traits – Un trait peut définir des propriétés – Un trait peut définir des méthodes abstraites – Un trait peut définir des variables et méthodes statiques – Un trait peut utiliser d’autres traits • Le trait se place entre la classe et l’interface. C’est une sorte de classe à typage faible et non instanciable.
  • 176.
    170 Les traits • <?php traitHelloWorld { public function sayHello() { echo 'Hello World!'; } } class TheWorldIsNotEnough { use HelloWorld; public function sayHello() { echo 'Hello Universe!'; } } $o = new TheWorldIsNotEnough(); $o->sayHello(); ?> • L'exemple ci-dessus va afficher : • Hello Universe!
  • 177.
    171 Méthodes et classefinal • Le mot-clé final est utilisé en PHP pour les méthodes et les classes: – Le mot-clé final pour les méthodes empêche la surcharge des méthodes, – Le mot-clé final pour les classes empêche l’héritage. • Méthode finale On ne peut pas surcharger la méthode de la classe mère. <?php class MathClass{ final function calculer($a, $b){ $somme = $a + $b; echo "La somme de $a et $b est =".$somme; } } class School extends MathClass{ function calculer($x, $y){ $prod = $x * $y; echo "le produit de $x et $y est =".$prod; } } $obj= new School(); $obj->calculer(2,4); ?>;
  • 178.
    172 Parcours d’objets: L’interfaceIterator • Nous allons découvrir l’interface Iterator et implémenter certaines de ses méthodes. • Parcourir les propriétés visibles d’un objet en utilisant une boucle foreach.
  • 179.
    173 Parcours d’objets: L’interfaceIterator • Exemple: class Test{ public $publique1 = 'Variable publique 1'; public $publique2 = 'Variable publique 2'; public $publique3 = 'Variable publique 3'; protected $protegee = 'Variable protégée'; private $privee = 'Variable privée'; } //Instanciation de la classe $test = new Test(); //Parcours et affichage des propriétés visibles foreach ($test as $clef => $valeur){ echo $clef.' => ' .$valeur. '<br>'; } ?> – Resultat: Publique1 => Variable publique 1 publique2 => Variable publique 2 Publique3 => Variable publique 3
  • 180.
    174 Parcours d’objets: L’interfaceIterator • L’interface Iterator est une interface prédéfinie en PHP. • Elle définit des méthodes qu’on va pouvoir implémenter pour itérer des objets en interne: – La méthode current() ; – La méthode next() ; – La méthode rewind() ; – La méthode key() ; – La méthode valid(). • vous devez savoir que les fonctions current(), next(), rewind() et key() existent toutes déjà en tant que fonctions prédéfinies en PHP. Nous allons donc les utiliser pour définir l’implémentation de nos méthodes.
  • 181.
    Parcours d’objets: L’interfaceIterator public function next(){ $tableau = next($this->tableau); echo 'Elément suivant : ' .$tableau. '<br>'; return $tableau; } public function valid(){ $clef = key($this->tableau); $tableau = ($clef !== NULL && $clef !== FALSE); echo 'Valide : '; var_dump($tableau); echo '<br>'; return $tableau; } } $tbtest = ['C1' => 'V1', 'C2' => 'V2', 'C3' => 'V3']; $objet = new Test($tbtest); foreach ($objet as $c => $v){ echo $c. ' => ' .$v. '<br><br>'; } ?> • Exemple: <?php //Définition d'une classe class Test implements Iterator{ private $tableau = []; public function construct(array$tb){ $this->tableau = $tb; } public function rewind(){ echo 'Retour au début du tableau<br>'; reset($this->tableau); } public function current(){ $tableau = current($this->tableau); echo 'Elément actuel : ' .$tableau. '<br>'; return $tableau; } public function key(){ $tableau = key($this->tableau); echo 'Clef : ' .$tableau. '<br>'; return $tableau; } 175
  • 182.
    176 Parcours d’objets: L’interfaceIterator • Lorsqu’on utilise une boucle foreach avec un objet qui implémente l’interface Iterator, le PHP va automatiquement – Commencer par appeler Iterator::rewind() avant le premier passage dans la boucle ce qui va dans notre cas affiche le texte « Retour au début du tableau » et va placer le pointeur interne du tableau au début de celui-ci. – Ensuite, avant chaque nouveau passage dans la boucle, Iterator::valid() est appelée et si false est retourné, on sort de la boucle. – Dans le cas contraire, Iterator::current() et Iterator::key() sont appelées. – Finalement, après chaque passage dans la boucle, Iterator::next() est appelée et on recommence l’appel aux mêmes méthodes dans le même ordre (excepté pour rewind() ).
  • 183.
    178 Exercices • Exercice 1 Créezune classe représentant une personne. Elle doit avoir les propriétés nom, prénom et adresse, ainsi qu’un constructeur et un destructeur . Une méthode getPersonne() doit retourner les coordonnées complètes de la personne. Une méthode setAdresse() doit permettre de modifier l’adresse de la personne. Créez des objets personne, et utilisez l’ensemble des méthodes.
  • 184.
    179 Exercices • Exercice 2 Créezune classe abstraite représentant une personne. Elle déclare les propriétés nom et prénom et un constructeur. Créez une classe client dérivée de la classe personne en y ajoutant la propriété adresse et une méthode setCoord() qui affiche les coordonnées complètes de la personne. Créez une classe électeur dérivée de la même classe abstraite, et ajoutez-y deux propriétés bureau_de_vote et vote, ainsi qu’une méthode avoter(), qui enregistre si une personne a voté dans la propriété vote.
  • 185.
  • 186.
    181 Les variables superglobales •Les variables superglobales sont des variables un peu particulières pour trois raisons : – Elles sont écrites en majuscules et commencent toutes, à une exception près, par un underscore ( _ ), – Les variables Superglobales sont des variables prédéfinies internes et sont toujours disponible, – Les superglobales sont des array car elles contiennent de nombreuses informations, – Ces variables sont automatiquement créées par PHP à chaque fois qu'une page est chargée.
  • 187.
    182 Les variables superglobales •Les variables superglobales PHP sont les suivantes: 1. $GLOBALS ; 2. $_SERVER ; 3. $_REQUEST ; 4. $_GET ; 5. $_POST ; 6. $_FILES ; 7. $_ENV ; 8. $_COOKIE ; 9. $_SESSION.
  • 188.
    183 Les variables superglobales superglobaleDescription Exemple d'utilisation $GLOBALS Contient toutes les variables disponibles dans un contexte global - $_SERVER Contient toutes les informations fournies par le serveur web Pratique pour connaitre le chemin du site, d'un dossier, etc. $_GET Contient les informations fournies en paramètre au script via la méthode GET par l'URL et le protocole HTTP. Utile pour véhiculer des informations d'une page à l'autre. $_POST Contient les informations fournies par un formulaire via la méthode POST du protocole HTTP. Utile pour récupérer les saisies postées dans un formulaire par un internaute.
  • 189.
    184 Les variables superglobales superglobaleDescription Exemple d'utilisation $_FILES Contient les informations liées à l'upload d'un (ou plusieurs) fichier(s) par un formulaire (fonctionne en complément de la superglobale $_POST). Utile pour récupérer le(s) fichier(s) uplaodé(s) dans un formulaire par un internaute. $_COOKIE Contient les informations fournies par les cookies via le protocole HTTP. Utile pour conserver des informations sur un internaute. $_SESSION Contient les informations de la session en cours. Utile pour maintenir une connexion avec un internaute sur un site web $_REQUEST Contient les variables fournies au script (peu importe la méthode utilisée). Utile pour récupérer des informations sans savoir précisément d'où elles proviennent $_ENV Contient les variables fournies par l'environnement. -
  • 190.
    185 La variable superglobale$GLOBALS • $GLOBALS nous permet d’accéder à des variables définies dans l’espace global depuis n’importe où dans le script et notamment depuis un espace local, • La variable $GLOBALS est une variable tableau qui stocke en fait automatiquement toutes les variables globales déclarées dans le script, • Ce tableau est un tableau associatif qui contient les noms des variables créées dans l’espace global en index et leurs valeurs en valeurs du tableau.
  • 191.
    186 La variable superglobale$GLOBALS • Exemple: <?php $prenom = ‘Julia'; $nom = 'Joly'; $age = 20; //On utilise la superglobale $GLOBALS function presenter(){ $mail = 'Joly@gmail.com'; echo 'Je suis ' .$GLOBALS['prenom']. ' ' .$GLOBALS['nom']. ', j'ai'.$GLOBALS['age']. ' ans.<br>Mon adresse mail est : ' .$mail; } presenter(); echo '<br><br>'; print_r($GLOBALS); ?>
  • 192.
    187 La variable superglobale$_SERVER • La superglobale $_SERVER contient des variables définies par le serveur utilisé ainsi que des informations relatives au script. • $_SERVER est un tableau associatif dont les clefs sont les noms des variables qu’elle stocke et les valeurs sont les valeurs des variables liées.
  • 193.
    188 La variable superglobale$_SERVER <?php //Renvoie le nom du fichier contenant le script echo $_SERVER['PHP_SELF']. '<br>'; //Renvoie le nom du serveur qui héberge le fichier echo $_SERVER['SERVER_NAME']. '<br>'; //Renvoie l'adresse IP du serveur qui héberge le fichier echo $_SERVER['SERVER_ADDR']. '<br>'; //Retourne l'IP du visiteur demandant la page echo $_SERVER['REMOTE_ADDR']. '<br>'; /*Renvoie une valeur non vide si le script a été appelé via le protocole HTTPS*/ echo $_SERVER['HTTPS']. '<br>'; //Retourne le temps Unix du début de la requête echo $_SERVER['REQUEST_TIME']; ?>
  • 194.
    189 La variable superglobale$_REQUEST • La variable superglobale $_REQUEST va contenir toutes les variables envoyées via HTTP GET, HTTP POST et par les cookies HTTP. • $_REQUEST est un tableau associatif, va ainsi contenir les variables de $_GET, $_POST et $_COOKIE.
  • 195.
  • 196.
    190 La variable superglobale$_ENV • La superglobale $_ENV va contenir des informations liées à l’environnement dans lequel s’exécute le script. • $_ENV est un tableau associatif qui va pouvoir contenir, par exemple, le nom de l’utilisateur qui exécute le script si celui-ci est accessible. • PHP a la fonction getenv() pour récupérer la liste de toutes les variables d'environnement ou la valeur d'une variable d'environnement spécifique <?php echo $_ENV['USER']. ' exécute actuellement ce script'; ?>
  • 197.
    19 7 Pour obtenir lavaleur d'une variable spécifique, utilisez son nom comme argument pour la fonction getenv() La variable superglobale $_ENV
  • 198.
    191 La variable superglobale$_FILES • La superglobale $_FILES va contenir des informations sur un fichier téléchargé, comme le type du fichier, sa taille, son nom, etc. • On pourra donc utiliser cette superglobale lorsqu’on offre la possibilité à nos utilisateurs de nous envoyer des fichiers, afin d’obtenir des informations sur les fichiers envoyés ou même pour filtrer et interdire l’envoi de certains fichiers.
  • 199.
  • 200.
  • 201.
    192 Les variables superglobales$_GET et $_POST • Les superglobales $_GET et $_POST vont être utilisées pour manipuler les informations envoyées via un formulaire HTML. • Ces deux superglobales stockent les différentes valeurs envoyées par un utilisateur via un formulaire selon la méthode d’envoi : – $_GET stockera les valeurs lorsque le formulaire sera envoyé via la méthode GET, – $_POST stockera les valeurs lorsque le formulaire sera envoyé via la méthode POST.
  • 202.
    193 La variable superglobale$_COOKIE • La superglobale $_COOKIE est un tableau associatif qui contient toutes les variables passées via des cookies HTTP. • Un cookie est un petit fichier texte qui ne peut contenir qu’une quantité limitée de données. • Les cookies vont être stockés sur les ordinateurs des visiteurs. • nous allons utiliser les cookies pour faciliter la vie des utilisateurs en préenregistrant des données les concernant comme un nom d’utilisateur par exemple. • dès qu’un utilisateur connu demande à accéder à une page Web, les cookies vont également automatiquement être envoyées dans la requête de l’utilisateur. Cela permet de l’identifier et de lui proposer une page personnalisée.
  • 203.
    194 La variable superglobale$_COOKIE • Pour créer un cookie en PHP, nous allons utiliser la fonction setcookie() de la façon suivante : – setcookie( name, value, expire, path, domain, secure, httponly ). – Ces paramètres ont la signification suivante :
  • 204.
    195 La variable superglobale$_COOKIE Paramètre Signification name Le nom du cookie. value La valeur du cookie. Comme cette valeur est stockée sur l’ordinateur d’un utilisateur, on évitera de stocker des informations sensibles. expires La date d’expiration du cookie sous forme d’un timestamp UNIX. Si aucune valeur n’est passée en argument, le cookie expirera à la fin de la session (lorsque le navigateur sera fermé). path Le chemin sur le serveur sur lequel le cookie sera disponible. Si la valeur est ‘/’, le cookie sera disponible sur l’ensemble du domaine. Si la valeur est ‘/cours/’, le cookie ne sera disponible que dans le répertoire /cours/ et les sous-répertoires.
  • 205.
    196 La variable superglobale$_COOKIE Paramètre Signification domain Indique le domaine ou le sous domaine pour lequel le cookie est disponible. secure Indique si le cookie doit uniquement être transmis à travers une connexion sécurisée HTTPS depuis le client. Si la valeur passée est true, le cookie ne sera envoyé que si la connexion est sécurisée. httponly Indique si le cookie ne doit être accessible que par le protocole HTTP. Pour que le cookie ne soit accessible que par le protocole http, on indiquera la valeur true. Cela permet d’interdire l’accès au cookie aux langages de scripts comme le JavaScript par exemple, pour se protéger potentiellement d’une attaque de type XSS.
  • 206.
    197 La variable superglobale$_COOKIE • Exemple: <?php setcookie('user_id', '1234'); setcookie('user_pref', 'dark_theme', time()+3600*24, '/', '', true, true); ?> <?php if(isset($_COOKIE['user_id'])){ echo 'Votre ID de session est le ' .$_COOKIE['user_id'];} ?>
  • 207.
    198 Modifier la valeurd’un cookie • Pour modifier la valeur d’un cookie, on utilise à nouveau la fonction setcookie() en lui passant le nom du cookie dont on souhaite changer la valeur et changer l’argument de type valeur passé à la fonction avec la nouvelle valeur souhaitée. <?php //On définit deux cookies setcookie('user_id', '1234'); setcookie('user_pref', 'dark_theme', time()+3600*24, '/', '', false,false); //On modifie la valeur du cookie user_id setcookie('user_id', '5678'); ?>
  • 208.
    199 supprimer un cookie •Pour supprimer un cookie, nous utilisons setcookie() en lui passant le nom du cookie qu’on souhaite supprimer et définissons cette fois-ci une date d’expiration se situant dans le passé pour le cookie en question. <?php if(isset($_COOKIE['user_id'])){ echo 'Votre ID de session est le ' .$_COOKIE['user_id']. '<br>';} if(isset($_COOKIE['user_pref'])){ echo 'Votre thème préféré est ' .$_COOKIE['user_pref']; }else{echo 'Pas de thème préféré défini';} //On supprime le cookie user_pref setcookie('user_pref', '', time()-3600, '/', '', false, false); ?>
  • 209.
    200 Les sessions • Qu'est-cequ'une session ? – Une session est une période entre un début et une fin d'une activité – Par exemple pour Internet, • j'ouvre mon navigateur sur http://www.php-astux.info et je referme le navigateur : – j'ai ainsi réalisé une session que j'ai commencée, puis terminée – On associe à une session un ensemble de valeurs définies de manière transparente pour le visiteur et que le serveur conserve de page en page, comme un cookie
  • 210.
    Les sessions • Lesdonnées d’une session – Les données d'une session sont stockées sur le serveur et non chez le client, ce qui l'empêche de pouvoir les modifier manuellement, comme il peut le faire pour un cookie, • La durée de vie d'une session – Le temps d’une navigation – Elle commence donc lors de l'accès à une page les utilisant et se termine à la fermeture du navigateur du client – Une fois la session terminée, elle est détruite ainsi que toutes les données qu'elle contient – Elle ne doit donc contenir que des données temporaires – Cependant, la session possède aussi un délai d'expiration • Celui-ci peut être modifié dans la configuration du serveur, mais vaut généralement une trentaine de minutes • Une fois ce délai dépassé, la session est supprimée 201 21 0
  • 211.
    202 Les sessions • Initialiserune session – Pour pouvoir utiliser la fonctionnalité de session de PHP, il faut lancer le moteur de session en utilisant la fonction session_start() – Vous devez placer ce code au tout début de votre script <?php session_start(); ?>
  • 212.
    203 Les sessions • Unesession portant un nom personnalisé – Une session porte par défaut le nom "PHPSESSID" – C'est lui qui sera utilisé comme paramètre GET dans les liens – Pour le changer, utiliser la fonction session_name() <?php session_name('nom_de_session'); session_start(); ?>
  • 213.
    204 Les sessions • Fermerune session – Une fois le script PHP terminé, les données de la session sont automatiquement sauvegardée pour le prochain script – Cependant, durant toute l'exécution du script, le fichier de la session est verrouillé et aucun autre script ne peut y toucher – Ils doivent donc attendre que le premier arrive à la fin – Vous pouvez fermer plus rapidement une session en utilisant la fonction session_write_close() – Si vous voulez également détruire la session, vous pouvez utiliser la fonction session_destroy() couplée à la fonction session_unset()
  • 214.
    205 Les sessions • Sauvegarderune variable – Les variables de sessions sont stockées dans le tableau super-global : $_SESSION <?php // Création de la session session_start(); //Sauvegarde dans la session créée de la variable "prenom" $_SESSION['prenom'] = ‘Ahmed'; ?> • Récupération de données dans une session – Quand on démarre une session avec session_start(), le tableau super- global $_SESSION est automatiquement initialisé avec les variables de la session – S'il contenait quelque chose, ce contenu n'est plus disponible après <?php echo $_SESSION['prenom']; ?>
  • 215.
    206 Les sessions • Supprimerune variable d'une session – Utiliser unset() qui prend en paramètre la variable à détruire – Exemple <?php unset($_SESSION['prenom']); // La variable de session "prenom" a été supprimée, on ne peut plus y avoir accès ! ?>
  • 216.
    207 Les sessions • Détruireune session – Utiliser session_destroy() qui ne prend aucun paramètre et qui renvoie vrai en cas de succès et faux en cas d'erreur – Fonctionnement : <?php if (session_destroy()) { echo 'Session détruite !'; } else { echo 'Erreur : impossible de détruire la session !'; } ?>
  • 217.
    208 Les sessions • Détruiretoutes les variables d'une session – Il est aussi possible de détruire toutes les variables de session, ce qui permet de conserver votre session : • il suffit tout simplement de réinitialiser le tableau $_SESSION <?php $_SESSION = array(); // $_SESSION est désormais //un tableau vide, toutes les variables de session ont //été supprimées ?
  • 218.
  • 219.
    210 Les formulaires • Toutéchange entre visiteur et serveur passe par un formulaire, dans lequel l’utilisateur peutsaisir des textes ou mots de passe, opérer des choix grâce à des boutons radio, des cases à cocher ou deslistes de sélection, voire envoyer ses propres fichiers depuis le poste client. • Il est donc important d’en maîtriser la création à la fois avec HTML 5, pour obtenir des formulaires présentables, et avec PHP, pour gérer les informations fournies par le formulaire au script côté serveur.
  • 220.
    211 Création d’un formulaireHTML • Avant toute chose, il faut créer la structure HTML d’un formulaire. <form method="post" action="nom_de_fichier.php"> <fieldset> <legend>Titre du formulaire</legend> <!-- Corps du formulaire contenant les différentes composants--> </fieldset> </form> • L’élément <form> possède certains attributs obligatoires comme L’attribut action="nom_de_fichier.php". Il désigne le fichier qui va traiter, sur le serveur, les informations saisies dans le formulaire.
  • 221.
    212 Création d’un formulaireHTML • method="post|get" détermine la méthode d’envoi des données vers le serveur. • La méthode get présente l’inconvénient d’ajouter les données du formulaire à l’adresse URI du fichier qui les traite, ce qui les rend visibles par le visiteur. • Cet inconvénient peut être exploité pour passer des données à un script dès son appel. • il existe une limite à la longueur des URI et donc à la quantité de données à transmettre. • La méthode post ne présente pas ces problèmes, elle est utilisée dans la plupart des cas.
  • 222.
    213 Création d’un formulaireHTML • name="chaine_de_caractères" attribue un nom au formulaire. Cet attribut est surtout utilisé pour accéder aux éléments du formulaire via un script JavaScript. • enctype="type_d’encodage" détermine le type d’encodage des données transmises au serveur. • L ’élément <fieldset> permet de créer des blocs visuels contenus entre les balises <fieldset> et </fieldset> et donc de structurer le formulaire en fonction des champs qu’il contient, ce qui améliore la présentation. • L ’élément <legend> contient le titre de chacun de ces blocs. • À l’intérieur de chaque bloc se trouvent les éléments HTML qui créent les champs visibles ou invisibles du formulaire.
  • 223.
    214 Création d’un formulaireHTML • L’élément <input /> – La balise unique <input /> permet de créer les composants classiques des formulaires. – Il possède un certains attribut comme type et name. Ce dernier est obligatoire car c’est lui qui permet d’identifier les champs côté serveur, – l’attribut type peut prendre les valeurs suivantes: "text", "password", "email", "tel", "date", "number", "checkbox", "radio", "submit", "reset", "file" et "hidden".
  • 224.
    215 Création d’un formulaireHTML • L’élément <input type="text" /> – Cet élément crée un champ de saisie de texte d’une seule ligne. – En plus de l’attribut name, vous pouvez apporter des précisions à l’aide des attributs suivants : • size="nombre". Détermine la largeur de la zone en nombre de caractères. • maxlength="nombre". Détermine le nombre maximal de caractères que l’utilisateur est autorisé à saisir. • value="texte". Définit un texte par défaut tant que l’utilisateur ne l’a pas modifié, comme dans l’exemple ci- dessous : <input type ="text" name="ville" size="30" maxlength="40" value="Votre ville"/>
  • 225.
    216 Création d’un formulaireHTML • L’élément <input type="email" /> – Crée un champ de saisie d’adresse e-mail identique à un champ de texte, – Les attributs size et maxlength y jouent le même rôle que précédemment. – si l’on définit son attribut pattern, qui contient un motif d’expression régulière, le navigateur vérifie la validité de la saisie et avertit l’utilisateur en cas d’erreur. – <input type ="email" name="mail" size="50" pattern="(^[a-z0-9]+)@([a-z0-9]) +(.)([a-z]{2,4})"/>
  • 226.
    217 Création d’un formulaireHTML • L’élément <input type="tel" /> – Cette balise crée un champ de saisie de numéro de téléphone, – On peut également lui ajouter l’attribut pattern contenant une expression régulière, – Par exemple: <input type ="tel" name="tel" pattern="^0[0-9]{9}" />
  • 227.
    218 Création d’un formulaireHTML • L’élément <input type="password" /> – Elle crée un champ de saisie de mot de passe semblable à un champ texte mais dans lequel les caractères saisis sont invisibles et remplacés par des astérisques, – Les attributs size et maxlength y jouent le même rôle que précédemment. – Exemple : <input type ="password" name="code" size="10" maxlength ="6" />
  • 228.
    219 Création d’un formulaireHTML • L’élément <input type="number" /> – Crée un champ de saisie de nombre, – on peut définir les attributs min et max afin de créer un intervalle de valeurs autorisées, – l’attribut required peut être définit pour rendre une saisie obligatoire. – exemple: <input type="number" name="num" min="1" max="10" step="2" />
  • 229.
    220 Création d’un formulaireHTML • L’élément <input type="date" /> – Crée un champ de saisie de date au format AAA-MM-JJ. – En ajoutant les attributs min et max, on peut définir des dates minimale et maximale. – Exemple : <input type ="date" name="ladate" min="2016-09-01" max="2017- 12-31" /> – Ici, la date saisie doit obligatoirement être comprise entre le 1er septembre 2016 et le 31 décembre 2017. – Il existe des variantes de ce composant qui permettent de saisir l’heure, le mois, la semaine ou encore la date et l’heure simultanément, en remplaçant la valeur de l’attribut type par time, month, week et datetime respectivement.
  • 230.
    221 Création d’un formulaireHTML • L’élément <input type="radio" /> – Crée un bouton radio. Employé seul, un bouton radio peut servir à valider des choix. – Employé en groupe, qu’un seul choix est autorisé, tous les boutons radio du groupe doivent avoir une même valeur pour l’attribut "name". – Le fait d’en activer un désactive celui qui l’était auparavant. L ’attribut checked="checked" définit le bouton coché par défaut. L ’attribut value joue le même rôle que pour les cases à cocher et est également indispensable. – Exemple : • <label>Femme</label><input type ="radio" name="capa" value= "Femme" /> • <label>Homme</label><input type ="radio" name="capa" value= "Homme" />
  • 231.
    222 Création d’un formulaireHTML • L’élément <input type="checkbox" /> – Crée une case à cocher utilisée pour effectuer un ou plusieurs choix parmi ceux qui sont préétablis par le programmeur. – L ’attribut value contient le texte qui sera transmis au serveur si l’utilisateur coche la case. – Exemple : <input type ="checkbox" name="lang[]" value="français" /> <input type ="checkbox" name="lang[]" value="anglais" />
  • 232.
    223 Création d’un formulaireHTML • L’élément <input type="submit" /> – Crée un bouton sur lequel l’utilisateur doit cliquer pour déclencher l’envoi des données de tout le formulaire vers le serveur. – Le clic sur ce bouton est alors analysé par le script désigné par l’attribut action de l’élément <form>. – Exemple: <input type ="submit" value="Envoyer" />
  • 233.
    224 Création d’un formulaireHTML • L’élément <input type="reset" /> – Crée un bouton de réinitialisation du formulaire, – Exemple : <input type ="reset" value="Effacer" />
  • 234.
    225 Création d’un formulaireHTML • L’élément <input type="file" /> – Permet le transfert de fichiers du poste client vers le serveur. – crée un champ de saisie et un bouton de sélection de fichier permettant à l’utilisateur de choisir le fichier à transférer. – l’attribut accept définit le ou les types de fichier acceptés en transfert. – Exemple: <input type="file" name="monfichier" accept="image/gif, image/jpeg" size="30"/>
  • 235.
    226 Création d’un formulaireHTML • L’élément <input type="hidden" /> – Crée un champ caché n’ayant aucun rendu visuel dans le formulaire mais permettant de transmettre des informations invisibles pour l’utilisateur. – exemple : <input type="hidden" name="MAX_FILE_SIZE" value="200"/>
  • 236.
    227 Création d’un formulaireHTML • L’élément <textarea> – crée un champ de saisie de texte permettant la saisie sur plusieurs lignes. – Cet élément comporte une balise de fermeture </textarea> et un contenu de texte par défaut affiché dans la zone de texte. – Les attributs cols et rows donnent respectivement le nombre de colonnes et de lignes de la zone de texte, – Exemple : <textarea name="commentaire" cols="45" rows="8" > Tapez vos commentaires ici </textarea>
  • 237.
    228 Création d’un formulaireHTML • L’élément <select> – Crée une liste de sélection d’options parmi lesquelles l’utilisateur fait un choix, – Chaque option devant être définie par un élément <option> séparé. – Exemple : <select name="maliste"> <option value="valeur 1"> Texte choix 1</option> <option value="valeur 2"> Texte choix 2</option> <option value="valeur 3"> Texte choix 3</option> </select>
  • 238.
    229 Création d’un formulaireHTML • Il comporte les attributs suivants : – name="nom_select". Obligatoire. Donne le nom de la liste. – size="Nombre". Détermine le nombre de choix visibles simultanément. – multiple="multiple". Autorise la sélection de plusieurs options simultanément. – L ’élément <option> comporte les attributs suivants : • value="chaine". Obligatoire. Définit la valeur transmise au serveur si l’option est sélectionnée. • selected="selected". Définit l’option qui est sélectionnée par défaut dans la liste si l’utilisateur ne fait pas de choix
  • 239.
    230 Récupération des donnéesdu formulaire • Récupération des données entrées par l’utilisateur dans les champs du formulaire. • lorsque l’utilisateur clique sur le bouton d’envoi une requête HTTP est envoyée au serveur à destination du script désigné par l’attribut action de l’élément <form>. • La requête contient toutes les associations entre les noms des champs et leur valeur. Ces associations se trouvent dans l’en-tête HTTP si la méthode POST est utilisée et dans l’URL s’il s’agit de la méthode GET.
  • 240.
    Récupération des donnéesdu formulaire • Cas de la méthode POST <form action= "<?= $_SERVER["PHP_SELF"] ?>" method="post"> <fieldset> <legend><b>Infos</b></legend> Nom : <input type="text" name="nom" size="40" /> <br /> Débutant : <input type="radio" name="niveau" value="débutant" /> Initié : <input type="radio" name="niveau" value="initié" /><br /> <input type="reset" value="Effacer" /> <input type="submit" value="Envoyer" /> </fieldset> </form> <?php if(isset($_POST["nom"]) && isset($_POST["niveau"])) { echo "<h2> Bonjour ". stripslashes($_POST["nom"]). " vous êtes ". $_POST["niveau"]." en PHP</h2>"; } ?> 10:48 231 24 0
  • 241.
    232 Récupération des donnéesdu formulaire • action= "<?= $_SERVER["PHP_SELF"] ?>" Cela désigne le script lui-même comme cible pour le traitement des données. • Le code PHP contrôle d’abord l’existence des variables $_POST["nom"] et $_POST["niveau"], qui représentent respectivement le texte saisi et la valeur associée à la case cochée de façon à n’afficher le message qu’après l’envoi des données.
  • 242.
    233 Récupération des donnéesdu formulaire • Cas de la méthode GET • Vous récupérez les données du formulaire dans les variables $_GET["nom"] et $_GET["niveau"], comme ci-dessous : <?php if(isset($_GET["nom"]) && isset($_GET["niveau"])) { echo "<h2> Bonjour ". stripslashes ($_GET["nom"]). " vous êtes ".$_GET["niveau"]." en PHP</h2>"; } ?>
  • 243.
    234 Récupération des donnéesdu formulaire • Les valeurs multiples – Certains champs de formulaire peuvent permettre aux visiteurs de saisir plusieurs valeurs sous un même nom de composant. – Comme dans l’exemple suivant : • Bleu:<input type="checkbox" name="choix[]" value="bleu" /> • Blanc:<input type="checkbox" name="choix[]" value="blanc" /> – l’utilisateur peut cocher les deux cases simultanément.Le programmeur récupère ces valeurs dans les variables suivantes : • $_POST["choix"][0] • $_POST["choix"][1] qui contient la valeur "bleu" qui contient la valeur "blanc"
  • 244.
    235 Récupération des donnéesdu formulaire • Récupération des valeurs multiples <!DOCTYPEhtml> <html lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Listes à choix multiples</title> </head> <body> <form method="post" action= " traitement.php" > <fieldset> <legend>Recherche d’emploi : complétez la fiche</legend> <div> <span> Nom<input type="text" name="ident[]" /> Prénom<input type="text" name="ident[]" /> Âge<input type="number" step="1" name="ident[]" /> <br /><br /> Langues pratiquées<br /> <select name="lang[]" multiple="multiple"> <option value="français"> français</option>
  • 245.
    236 Récupération des donnéesdu formulaire <option value="anglais"> anglais</option> <option value="allemand"> allemand</option> <option value="espagnol"> espagnol</option> </select><br /><br /> Compétences informatiques<br /> HTML 5<input type="checkbox" name="competent[]" value="HTML 5" /> CSS 3<input type="checkbox" name="competent[]" value="CSS 3" /> PHP<input type="checkbox" name="competent[]" value="PHP" /> MySQL<input type="checkbox" name="competent[]" value="MySQL" /> </span><br /><br /> <input type="reset" value="EFFACER"/> <input type="submit" value="ENVOI"/> </div> </fieldset> </form> </body> </html>
  • 246.
    237 Récupération des donnéesdu formulaire <!DOCTYPE html> <html lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Compétences informatiques</title> </head> <body> <?php if(isset($_POST["ident"]) && isset($_POST["lang"]) && isset($_POST["competent"])) { echo "<table border="1"><tr><th> Récapitulatif de votre fiche d’informations personnelles </th></tr><tr><td>"; $nom=$_POST["ident"][0]; $prenom=$_POST["ident"][1];
  • 247.
    238 Récupération des donnéesdu formulaire $age=$_POST["ident"][2]; $lang = $_POST["lang"]; $competent=$_POST["competent"]; echo"Vous êtes :<b> $prenom ", $nom ,"</b><br />Vous avez <b>$age ans </b> "; echo "<br />Vous parlez :"; echo "<ul>"; foreach($lang as $valeur) {
  • 248.
    239 Récupération des donnéesdu formulaire echo " <li> $valeur </li>"; } echo "</ul>"; echo "Vous avez des compétences informatiques en :"; echo "<ul>"; foreach($competent as $valeur) { echo "<li> $valeur </li> "; } echo "</ul> </td></tr>"; } else { echo"<script type="text/javascript">"; echo "alert('Saisissez votre nom et cochez au moins une compétence !');"; echo "window.history.back();"; echo "</script>"; } ?> </body> </html>
  • 249.
  • 250.
    Se connecter àune BD MySQL en PHP • PHP met à notre disposition deux API (Application Programming Interface) : – MySQLi ; – PDO (PHP Data Objects). • MySQLi ne fonctionne qu’avec les bases de données MySQL • PDO fonctionne avec 12 systèmes de bases de données différents. • MySQLi et PDO sont orientés objet et ils supportent les requêtes préparées qui servent à se prémunir des injections SQL 25 0
  • 251.
    Connexion au serveuravec MySQLi • Pour se connecter au serveur MySQL en MySQLi , nous allons avoir besoin de trois choses : 1. nom du serveur :localhost 2. nom d’utilisateur : root 3. son mot de passe: soit root soit une chaine de caractère vide <?php $servername = 'localhost'; //On établit la connexion $username = 'root'; $password = ''; $conn = new mysqli($servername, $username, $password); //On vérifie la connexion if($conn->connect_error){ die('Erreur : ' .$conn->connect_error); } echo 'Connexion réussie'; $conn->close(); ?> • Pour fermer la connexion à la base de données ouverte la fin de l’exécution du script, on utilise la méthode close(). 25 1
  • 252.
    Connexion au serveuravec PDO • Pour se connecter en utilisant PDO, nous allons instancier la classe PDO en passant au constructeur: 1. le nom du serveur, 2. Le nom de la base de données 3. Le nom d’utilisateur et le mot de passe. • Pour détruire l’objet représentant la connexion et effacer toutes ses références, on assigne la valeur NULL à la variable gérant l’objet. 25 2
  • 253.
    Connexion au serveuravec PDO • Exemple: <?php $servername = 'localhost'; $username = 'root'; $password = ''; try{ $conn = new PDO("mysql:host=$servername ", $username, $password); //On définit le mode d'erreur de PDO sur Exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo 'Connexion réussie'; } /*On capture les exceptions si une exception est lancée et on affiche les informations relatives à celle-ci*/ catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); $conn=null; } ?> 25 3
  • 254.
    Connexion au serveuravec PDO • La méthode setAttribute() sert à configurer : 1. l’attribut PDO::ATTR_ERRMODE qui sert à créer un rapport d’erreur 2. L’attribut PDO::ERRMODE_EXCEPTION qui demande au PHP de lancer une exception issue de la classe PDOException et d’en définir les propriétés afin de représenter le code d’erreur et les informations complémentaires. • Le bloc catch capture l’exception PDOException et affiche le message d’erreur correspondant. 25 4
  • 255.
    Création d’une BDen utilisant PDO • Pour créer une nouvelle base de données avec PDO en PHP, on utilise la requête SQL CREATE DATABASE suivie du nom de la base de données. • Pour exécuter une requête SQL en PDO, on utilise la méthode exec() qui va prendre en paramètre une requête SQL. • La méthode exec() va se charger d’exécuter notre requête et de créer la base de données. 25 5
  • 256.
    Création d’une BDen utilisant PDO • Exemple : <?php $servername = 'localhost'; $username = 'root'; $password = ''; try{ $dbco = new PDO("mysql:host=$servername", $username, $password); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "CREATE DATABASE pdodb"; $dbco->exec($sql); echo 'Base de données bien créée !'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 25 6
  • 257.
    Création d’une tableen utilisant MySQL et PDO • Pour créer une nouvelle table dans une base de données, – nous allons utiliser la requête SQL CREATE TABLE suivie du nom que l’on souhaite donner à notre table, – nous allons également pouvoir préciser entre parenthèse les noms des colonnes de notre table ainsi que le type de données qui doit être stocké dans chaque colonne. 25 7
  • 258.
    Création d’une tableen utilisant MySQL et PDO • Il existe quatre grands types de données principaux en MySQL : ➢Les données de type texte, ➢Les données de type nombre, ➢Les données de type date ➢Les données de type spécial. 25 8
  • 259.
    Création d’une tableen utilisant MySQL et PDO • Les sous types de valeurs les plus courants et les plus utilisés sont : – INT : accepte un nombre entier de 4 octets, – VARCHAR : accepte une chaine de longueur variable (entre 0 et 65 535 caractères), – TEXT : accepte une chaine de caractère d’une longueur maximum de 65 535 caractères , – DATE : accepte une date se situant entre le 1er janvier de l’an 1000 et le 31 décembre de l’an 9999. 25 9
  • 260.
    Création d’une tableen utilisant MySQL et PDO • Pour spécifier des contraintes supplémentaires pour chacune des colonnes de notre table, on utilise les attributs suivants: – NOT NULL – Signifie que chaque entrée doit contenir une valeur pour cette colonne. La valeur null n’est pas acceptée ; – UNIQUE – Chacune des valeurs dans la colonne doit être unique; – AUTO_INCREMENT – MySQL va automatiquement incrémenter au champ pour chaque nouvelle entrée ; – UNSIGNED –Cette contrainte permet de limiter les données reçues aux nombres positifs (0 inclus). 26 0
  • 261.
    Création d’une tableen utilisant MySQL et PDO • PRIMARY KEY – Est utilisé pour identifier de manière unique chaque nouvelle entrée dans une table. C’est une combinaison de NOT NULL et de UNIQUE. PRIMARY KEY ne doit s’appliquer qu’à une colonne dans une table mais chaque table doit obligatoirement posséder une colonne avec une PRIMARY KEY. • FOREIGN KEY – Utilisée pour empêcher des actions qui pourraient détruire les liens entre des tables. La FOREIGN KEY sert à identifier une colonne qui est identique à une colonne portant une PRIMARY KEY dans une autre table ; • CHECK – Sert à s’assurer que toutes les valeurs dans une colonne satisfont à une certaine condition ou se trouve dans un certain intervalle spécifié ; • DEFAULT value – Sert à définir une valeur par défaut qui va être renseignée si aucune valeur n’est fournie ; 26 1
  • 262.
    Création d’une tableen utilisant MySQL et PDO • Nous allons créer une table « Clients » dans notre base « pdodb ». cette table va contenir 9 colonnes : – Id – Nom – Prenom – Adresse – Ville – CodePostal – Pays – Mail – DateInscription 26 2
  • 263.
    Création d’une tableen utilisant MySQL et PDO • Exemple: <?php $servname = 'localhost'; $dbname = 'pdodb'; $user = 'root'; $pass = ''; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "CREATE TABLE Clients( Id INT UNSIGNED AUTO_INCREMENTPRIMARY KEY , Nom VARCHAR(30) NOT NULL, Prenom VARCHAR(30) NOT NULL, Adresse VARCHAR(70) NOT NULL, Ville VARCHAR(30) NOT NULL, Codepostal INT UNSIGNED NOT NULL, Pays VARCHAR(30) NOT NULL, Mail VARCHAR(50) NOT NULL, DateInscriptionTIMESTAMP, UNIQUE(Mail))"; $dbco->exec($sql); echo 'Table bien créée !'; } catch(PDOException $e){ ?> echo "Erreur : " . $e->getMessage(); } 263
  • 264.
    Insérer des donnéesdans une table MySQL • Pour insérer des données dans une table, nous allons utiliser l’instruction SQL: INSERT INTO nom_de_table (nom_colonne1, nom_colonne2, nom_colonne3, …) VALUES (valeur1, valeur2, valeur3, …) • Les valeurs de type chaine de caractère doivent être placées entre apostrophes ; • La valeur NULL et les valeurs de type numérique ne doivent pas être placées entre apostrophes. • Il n’est pas nécessaire de préciser les colonnes possédant un attribut AUTO_INCREMENT ou TIMESTAMP ni leurs valeurs associées puisque par définition MySQL stockera automatiquement les valeurs courantes. 26 4
  • 265.
    Insérer des donnéesdans une table • Exemple: <?php $servname = 'localhost'; $dbname = 'pdodb'; $user = 'root'; $pass = ''; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO Clients(Nom,Prenom,Adresse,Ville,Codepostal,Pays,Mail) VALUES(‘Salim',‘Adam',‘FBS',‘BM',23000, ‘Maroc', ‘Salim@gmail.com')"; $dbco->exec($sql); echo 'Entrée ajoutée dans la table'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> • nous n’avons pas à préciser nos colonnes Id et DateInscription ni les valeurs relatives à ces colonnes puisque celles-ci possèdent respectivement un AUTO_INCREMENT et un TIMESTAMP. 26 5
  • 266.
    Les transactions • Lorsde l’exécution d’un script il se peut que: – certaines entrées soient insérées et pas d’autres, – certaines entrées pourraient ne pas avoir toutes leurs données insérées. • Pour éviter cela, nous pouvons utiliser , dans notre code, les méthodes : • beginTransaction(), • commit(), • rollBack(). 26 6
  • 267.
    Les transactions • Laméthode beginTransaction() permet de démarrer ce qu’on appelle une transaction et de désactiver le mode autocommit. • Toutes les manipulations faites sur la base de données ne seront pas appliquées tant qu’on ne mettra pas fin à la transaction en appelant commit(). • La méthode rollBack() sert à annuler une transaction si l’on s’aperçoit d’une erreur, 26 7
  • 268.
    Les transactions Exemple: <?php $servname ='localhost'; $dbname = 'pdodb'; $user = 'root'; $pass = ''; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbco->beginTransaction(); $sql = "INSERT INTO Clients(Nom, Prenom, Adresse, Ville, Codepostal, Pays, Mail) VALUES(‘Salim', ‘yassen', ‘FBS', ‘BM', 23000, ‘Maroc', ‘salim@gmail.com')"; $dbco->exec($sql); $dbco->commit(); echo 'Entrées ajoutées dans la table'; catch(PDOException $e){ $dbco->rollBack(); echo "Erreur : " . $e->getMessage(); } } ?> 26 8
  • 269.
    Mettre à jourdes données dans une table • Exemple: <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //On prépare la requête et on l'exécute $sth = $dbco->prepare(" UPDATE Users SET mail='v.durand@edhec.com' WHERE id=2 "); $sth->execute(); //On affiche le nombre d'entrées mise à jour $count = $sth->rowCount(); print('Mise à jour de ' .$count. ' entrée(s)'); } catch( PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> • rowCount() retourne le nombre de lignes affectées par la dernière requête DELETE, INSERT ou UPDATE exécutée par l’objet de la classe PDOStatement correspondant (en l’occurrence ici $sth). 26 9
  • 270.
    } catch(PDOException $e){ echo"Erreur : " . $e->getMessage(); } ?> Modifier la structure d’une table • Ajouter une colonne dans une table <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = " ALTER TABLE Users $dbco->exec($sql); echo 'Colonne ajoutée'; ADD DateInscription TIMESTAMP "; 27 0
  • 271.
    } catch(PDOException $e){ echo"Erreur : " . $e->getMessage(); } ?> Modifier la structure d’une table • Supprimer une colonne dans une table <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "ALTER TABLE Users DROP COLUMN DateInscription "; $dbco->exec($sql); echo 'Colonne supprimée'; 27 1
  • 272.
    Modifier la structured’une table • Modifier une colonne dans une table <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = " ALTER TABLE Users MODIFY COLUMN Prenom VARCHAR(50) "; $dbco->exec($sql); echo 'Colonne mise à jour'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 27 2
  • 273.
    Supprimer des donnéesd’une table • Nous allons vouloir supprimer les utilisateurs dont le nom est: Ali <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DELETE FROM Users WHERE nom=‘Ali'"; $sth = $dbco->prepare($sql); $sth->execute(); $count = $sth->rowCount(); print('Effacement de ' .$count. ' entrées.'); } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 27 3
  • 274.
    Supprimer tts lesdonnées d’une table • Essayons par exemple d’effacer toutes les données de la table « Users » d’un coup. <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DELETE FROM Users"; $sth = $dbco->prepare($sql); $sth->execute(); $count = $sth->rowCount(); print('Effacement de ' .$count. ' entrées.'); } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 27 4
  • 275.
    Supprimer complètement unetable de la base de données • Exemple: <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DROP TABLE Users"; $dbco->exec($sql); echo 'Table bien supprimée'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 27 5
  • 276.
    Supprimer complètement unebase de données • Exemple: <?php $servname = "localhost"; $dbname = "pdodb"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = "DROP DATABASE pdodb"; $dbco->exec($sql); echo 'Base de données bien supprimée'; } catch(PDOException $e){ ?> echo "Erreur : " . $e->getMessage(); } 27 6
  • 277.
    sélection simple dedonnées dans une BD • Table « users » va contenir 5 colonnes : – Une colonne « id », type INT, UNISGNED, PRIMARY KEY, AUTO_INCREMENT – Une colonne « prenom », type VARCHAR(30) NOT NULL – Une colonne « nom », type VARCHAR(30) NOT NULL – Une colonne « mail », type VARCHAR(50) – Une colonne « dateInscrit », type TIMESTAMP. 27 7
  • 278.
    sélection simple dedonnées dans une BD <?php $servname = "localhost"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $createDB = "CREATE DATABASE cours"; $dbco->exec($createDB); //On utilise la base tout juste créée pour créer une table dedans $createTb = "use cours"; $dbco->exec($createTb); $createTb = "CREATE TABLE users( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, prenom VARCHAR(30) NOT NULL, nom VARCHAR(30) NOT NULL, mail VARCHAR(50), dateInscrit TIMESTAMP)"; $dbco->exec($createTb); $sth = $dbco->prepare(" INSERT INTOusers(prenom, nom, mail) VALUES (:prenom, :nom, :mail) "); $sth->bindParam(':prenom', $prenom); $sth->bindParam(':nom',$nom); $sth->bindParam(':mail',$mail); $prenom = “Adam"; $nom = “Salim"; $mail = “salim@gmail.com"; $sth->execute(); $prenom = "Victor"; $nom = "Durand"; $mail = "victor@gmail.com"; $sth->execute(); $prenom = "Julia"; $nom = "Joly"; $mail = "july@gmail.com"; $sth->execute(); } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 27 8
  • 279.
    sélection simple dedonnées dans une BD • Nous sélectionnons tous les prénoms et adresses mail de notre table « users ». <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname; dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*Sélectionne les valeurs dans les colonnes prenom et mail de la table *users pour chaque entrée de la table*/ $sth = $dbco->prepare("SELECT prenom, mail FROM users"); $sth->execute(); /*Retourne un tableau associatif pour chaque entrée de notre table *avec le nom des colonnes sélectionnées en clefs*/ $resultat = $sth->fetchAll( PDO::FETCH_ASSOC); /*print_r permet un affichage lisible des résultats, *<pre> rend le tout un peu plus lisible*/ echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 27 9
  • 280.
    sélection simple dedonnées dans une BD • La méthode fetchAll() est une méthode de la classe PDOStatement qui va retourner un tableau contenant toutes les lignes de résultats. • La valeur FETCH_ASSOC va faire que le tableau retourné sera un tableau multidimensionnels contenant des tableaux indexés avec le nom des colonnes dont on récupère les données en index. 28 0
  • 281.
    Récupérer toutes lesvaleurs dans une table <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*Sélectionne toutes les valeurs dans la table users*/ $sth = $dbco->prepare("SELECT * FROM users"); $sth->execute(); /*Retourne un tableau associatif pour chaque entrée de notre table *avec le nom des colonnes sélectionnées en clefs*/ $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); /*print_r permet un affichage lisible des résultats, <pre> rend le tout un peu plus lisible*/ echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 28 1
  • 282.
    Ne récupérer queles valeurs uniques dans une table <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sth = $dbco->prepare("SELECT DISTINCT prenom FROM users"); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); //<pre> permet un affichage lisible des résultats affichés avec print_r() echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 28 2
  • 283.
    Mettre en ordreles valeurs récupérées dans une table • Sélectionnons tous les prénoms et noms de notre table « users » et trions les résultats renvoyés selon l’ordre croissant des prénoms en tri principal puis selon l’ordre décroissant des noms en tri secondaire. <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Tri croisant par prénoms puis décroissant par noms $sth = $dbco->prepare(" SELECT prenom, nom FROM users ORDER BY prenom ASC, nom DESC "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ ?> echo "Erreur : " . $e->getMessage(); } 28 3
  • 284.
    critères de sélection •Les critères de sélection vont nous aider à créer des requêtes SQL de sélection puissantes et précises: – WHERE ; – AND, OR et NOT ; – LIMIT ; – LIKE et les jokers (wildcards) ; – IN et BETWEEN ; – EXISTS ; – ANY et ALL. 28 4
  • 285.
    ?> La clause SQLWHERE • Dans la table « users » nous allons sélectionner tous les utilisateurs dont le prénom est « Adam ». <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //On sélectionne tous les users dont le nom = Pierre $sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users WHERE prenom = ‘Adam‘ "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } 28 5
  • 286.
    ?> Les opérateurs SQLAND, OR et NOT • Nous allons pouvoir étendre les possibilités de la clause SQL WHERE grâce aux opérateurs AND, OR et NOT. <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*On sélectionne tous les users dont le prenom = Pierre et le nom = Giraud*/ $sth = $dbco->prepare(" FROM users WHERE prenom = ‘Adam' AND nom = SELECT prenom, nom, mail ‘Salim‘ "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } 28 6
  • 287.
    ?> Les opérateurs SQLAND, OR et NOT • L’opérateur SQL OR nous permet d’élargir notre condition de base en rajoutant d’autres conditions. • A la différence de AND, tous les résultats satisfaisants au moins l’une des conditions mentionnées seront affichés. <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*On sélectionne tous les users dont le prenom = Adam ou le nom = Joly*/ $sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users WHERE prenom = ‘Adam' OR nom = 'Joly' "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } 28 7
  • 288.
    Les opérateurs SQLAND, OR et NOT • l’opérateur SQL NOT va nous permettre d’afficher tous les résultats ne satisfaisant pas une condition. • On peut par exemple afficher tous les utilisateurs dont le prénom n’est pas «Adam». <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //On sélectionne tous les users dont le prenom n'est pas Adam $sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users WHERE NOT prenom = ‘Adam‘ "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException$e){ echo "Erreur : " . $e->getMessage(); } ?> 28 8
  • 289.
    La clause LIMIT •La clause SQL LIMIT est généralement utilisée pour limiter le nombre de résultats retournés. • La clause LIMIT va sélectionner des résultats dans l’ordre des entrées de votre table. • On va pouvoir spécifier à partir de quelle entrée on souhaite commencer à récupérer des résultats grâce au mot OFFSET. 28 9
  • 290.
    La clause LIMIT <?php $servname= "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*Sélectionne 2 résultats à partir de la 2è entrée de la table*/ $sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users $sth-> execute(); LIMIT 2 OFFSET 1 "); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 29 0
  • 291.
    L’opérateur SQL LIKEet les jokers (wildcards) • Nous allons utiliser l’opérateur SQL LIKE conjointement avec une clause WHERE afin de chercher un schéma spécifique dans une colonne. • Nous allons également généralement utiliser l’opérateur LIKE avec des jokers ou wildcards. • Il existe deux jokers que nous allons pouvoir utiliser avec LIKE : – Le signe % qui va représenter zéro, un ou plusieurs caractères ; – Le signe _ qui va représenter un caractère exactement. 29 1
  • 292.
    L’opérateur SQL LIKEet les jokers (wildcards) • voici quelques exemples de parties de requêtes utilisant LIKE et des jokers ainsi que leur signification : Requête Signification WHERE users LIKE ‘p%’ Cherche les valeurs qui commencent par un « p » WHERE users LIKE ‘%e’ Cherche les valeurs qui se terminent par « e » WHERE users LIKE ‘%e%’ Cherche les valeurs qui possèdent un « e » WHERE users LIKE ‘p%e’ Cherche les valeurs qui commencent par « p » et se terminent par « e » WHERE users LIKE ‘p e’ Cherche des valeurs de 6 caractères exactement qui commencent par « p » et se terminent par « e » WHERE users LIKE ‘p_%’ Cherche des valeurs de 2 caractères ou plus qui commencent par « p » 29 2
  • 293.
    L’opérateur SQL LIKEet les jokers (wildcards) <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Cherche tous les noms contenant un "r" $sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users WHERE nom LIKE '%r%' "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } echo "Erreur : " . $e->getMessage(); } catch(PDOException $e){ ?> 29 3
  • 294.
    Les opérateurs SQLIN et BETWEEN • L’opérateur SQL IN va s’utiliser conjointement avec une clause WHERE. • Cet opérateur va nous permettre de préciser une liste de données parmi lesquelles nous devons sélectionner nos données. • Utiliser IN revient finalement à utiliser plusieurs conditions OR mais avec une notation allégée et plus rapide. 29 4
  • 295.
    Les opérateurs SQLIN et BETWEEN < <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Cherche tous les utilisateurs dont le prénom est Adam ou Victor $sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users prenom IN (‘Adam', 'Victor') WHERE "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 29 5
  • 296.
    Les opérateurs SQLIN et BETWEEN • Sélectionner tous les utilisateurs dont le id se trouve entre 1 et 2; <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = ""; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Sélectionne les utilisateurs dont le nom se trouve entre F et Joly $sth = $dbco->prepare(" SELECT prenom, nom, mail FROM users WHERE id BETWEEN 1 AND 2' "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_ASSOC); echo '<pre>'; print_r($resultat); echo '</pre>'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> 29 6