Vous êtes sur la page 1sur 104

Prof.

Morad HAJJI

PHP
Hypertext Preprocessor
Partie 1

1
Plan

1 Introduction

2 Variables

3 Conditions

4 Boucles

5 Fonctions

6 Programmation objet

7 Gestion des exceptions

2
Introduction

Principe de fonctionnement d’un site Web statique et le principe de fonctionnement


d’un site Web dynamique

3 - Visualisation 4 - Visualisation
de la page de la page

1 - Demande de la page HTML 1 - Demande de la page PHP

2 - Génération de
la page HTML

2 - Envoi de la page HTML 3 - Envoi de la page HTML

Page Web statique Page Web dynamique


3
Introduction

PHP est un langage interprété utilisé principalement pour la création des site Web
dynamique. Le langage PHP s’inspire syntaxiquement du langage C.

En fait, les programmes PHP sont lus et interprétés par le moteur PHP directement
sans passer par une quelconque phase de compilation.

4
Introduction

Le langage PHP permet de créer des pages Web dont le contenu HTML est généré
dynamiquement. En effet, grâce au PHP, nous allons pouvoir produire des contenus
HTML différents pour une même page en fonction de certaines conditions : la période
de consultation, les informations relatives aux situations des l’utilisateurs, etc.

PHP fait partie des langages qu’on nomme « server side » en opposition aux langages
« client side » qui s’exécutent côté client. En effet, le code PHP va s’exécuter côté
serveur. En conséquence, les clients ne reçoivent que le code HTML généré par un
programme PHP.

5
Introduction

QUELQUES RÈGLES DE BASE

1. Un script PHP doit être placé à l'intérieur d'une paire de balises. Parmi les
nombreux styles de balises, nous allons utiliser le style suivant :

2. Les instructions PHP doivent se terminer par un point-virgule (;).


3. Pour l’affichage, nous pouvons utiliser : print (ou l’une de ses variantes) ou echo.

4. Un fichier contenant des instructions PHP doit avoir l'extension « .php »


6
Introduction

Où écrire le code PHP ?

Nous pouvons écrire des scripts PHP soit dans des fichiers dédiées qui ne vont
contenir que du PHP, soit intégrer le PHP au sein des fichiers HTML.

7
Introduction

Où écrire le code PHP ?


Les résultats des deux types de style d’écriture sont identiques. En conséquence, sur
la figure ci-dessous se trouve le code HTML généré dans les deux cas : PHP dans un
fichier dédié ou PHP incorporé dans du code HTML.

8
Variables

Types de données

PHP est un langage pauvrement typé comparé à Java et C. PHP permet la


manipulation d’un certain nombre de types de données différents :
 Les types scalaires de base :
 Integer : les nombres entiers.
 Double et float : les nombres flottants (réels ou décimaux).
 String : chaînes de caractères.
 Boolean : booléens pour les valeurs TRUE ou FALSE (soit les valeurs 1 ou 0).
 Les types composés :
 Array : tableaux, qui peut contenir plusieurs valeurs.
 Object : les objets.
 Les types spéciaux :
 Resource : contient une référence vers une ressource externe.
 Null : représente une variable sans valeur. 9
Variables

Déterminer le type d’une variable

Avant de manipuler des variables, il peut être utile de connaître leur type. Cela permet
de s’assurer que le résultat obtenu est conforme à ce qui est attendu et qu’il n’y a pas
d’incompatibilité entre les types de ces variables. par exemple, l’opérateur
d’incrémentation appliqué à une chaîne peut donner des résultats curieux.

La principale fonction permettant de déterminer le type d’une variable est gettype(),


dont la syntaxe est la suivante :

Elle retourne une chaîne de caractères contenant le type de la variable en clair.

10
Variables

Déterminer le type d’une variable

Les fonctions suivantes permettent de vérifier si une variable est d’un type précis.
Elles retournent la valeur booléenne TRUE si la variable est du type recherché et
FALSE dans le cas contraire :

11
Variables

Déclaration simple

Le nom d’une variable doit commencer par une lettre (majuscule ou minuscule) ou le
caractère "_" . Il peut ensuite comporter des lettres, des chiffres et le caractère "_" .

Pour utiliser une variable, il faut toujours mettre le caractère $ avant le nom de la
variable, sans espace entre les deux.

Il n’est pas nécessaire de déclarer une variable avant de l’utiliser. En plus, les
variables ne sont pas fortement typées, c’est-à-dire que le type de la variable (nombre
entier, nombre réel, chaîne de caractères, booléen, etc) peut changer à tout moment.

12
Variables

Déclaration simple

Exemples :

Avec le code PHP ci-dessus, on définit les variables $var1_test de type entier,
$var2_test de type chaine de caractères et $var3_test de type flottant.

13
Variables

La conversion de type
Des fois, il peut être indispensable de convertir explicitement une variable d’un type
dans un autre. C’est particulièrement vrai pour les variables issues d’un formulaire.
Ces variables sont toujours de type string.

Avec le code PHP ci-dessus, on définit une variable $var avec le type chaine de
caractères. Elle est ensuite convertie automatiquement (implicite) vers le type
flottant. Elle est convertie manuellement (explicite) vers le type entier avec la
syntaxe (type_destination) $var. Elle est convertie explicitement vers le type chaine
de caractères en utilisant la fonction settype( mixed $var , string $type ). 14
Variables

Existence de variables, la fonction isset()

La fonction isset($var) permet de vérifier si une variable a été déjà définie. La fonction
isset($var) renvoie true si la variable $var existe, et false sinon.

En revanche, la fonction unset($var) permet de supprimer la variable $var.

Exemple :

15
Variables

Test de variables, la fonction empty()

La fonction empty($var) permet de vérifier si une variable a été déjà initialisée. La


fonction empty($var) renvoie true si la variable $var n’est pas encore initialisée
(variable sans valeur), et false sinon (la variable contient une valeur). Dans le cas où
une variable n’existe pas, la fonction empty() retourne la valeur true.
empty($var) est strictement équivalent à !isset($var) || $var == false.
Exemple :

16
Variables

Chaines de caractères

Pour les échanges entre le client et le serveur au moyen de formulaires, toutes les
données sont transmises sous forme de chaînes de caractères, d’où leur importance.
Une chaîne de caractères est une suite de caractères alphanumériques contenus
entre des guillemets (" ") ou des apostrophes (' ').

Les guillemets permettent l’évaluation des variables et caractères spéciaux contenus


dans la chaîne alors que les apostrophes ne le permettent pas. Par exemple :

17
Variables

Chaines de caractères : quelques fonctions

strlen($str) retourne le nombre de caractères d’une chaîne


strtolower($str) conversion en minuscules
strtoupper($str) conversion en majuscules
trim($str) suppression des espaces de début et de fin d’une chaîne
retourne une sous chaîne de $str de taille $j en débutant à la
substr($str,$i,$j)
position $i

strnatcmp($str1,$str2) comparaison de deux chaînes

addslashes($str) déspécialise les caractères spéciaux (‘, ‘’, \)


ord($char) retourne la valeur ASCII du caractère $char
18
Variables

Tableaux indicés
Les tableaux sont un type composé. Ils permettent de stocker sous un même nom de
plusieurs valeurs indépendantes d’un des types de base. C’est comme un tiroir divisé
en compartiments. Chaque compartiment, que nous nommerons un élément du
tableau, est repéré par un indice numérique (le premier indice ayant par défaut la
valeur 0 et non 1). D’où l’expression de tableau indicé.

19
Variables

Tableaux indicés
Une variable tableau est de type array. Un tableau accepte des éléments de tout type.
Les éléments d’un tableau peuvent être de types différents et sont séparés d’une
virgule. On peut définir un tableau en utilisant la fonction array().
Exemple :

20
Variables

Tableaux associatifs
Chaque élément d’un tableau peut aussi être identifié par une étiquette, qui est une
chaîne de caractères ou une variable de type string, nommée clé, associée à
l’élément du tableau. Ce type de tableau est appelé tableau associatif.

21
Variables

Tableaux associatifs

22
Variables

Tableaux associatifs
La fonction array() permet de définir un tableau associatif d’une manière plus
expressive. Voir l’exemple suivant :

23
Variables

Tableaux associatifs multidimensionnel


Un tableau multidimensionnel est un tableau dont les éléments sont des tableaux.

24
Variables

Tableaux associatifs multidimensionnel


Un tableau multidimensionnel est un tableau dont les éléments sont des tableaux.

25
Variables
Tableaux : quelques fonctions
count($tab), sizeof retournent le nombre d’éléments du tableau
in_array($var,$tab,$strict) test si la valeur de $var existe dans le tableau $tab. Si $trict
vaut true alors la fonction vérifiera aussi le type.
list($var1,$var2…) transforme une liste de variables en tableau
shuffle($tab) mélange les éléments d’un tableau
sort($tab) tri alphanumérique des éléments du tableau
rsort($tab) tri alphanumérique inverse des éléments du tableau
implode($séparateur,$tab) retournent une chaîne de caractères contenant les éléments du
tableau $tab joints par la chaîne de jointure $séparateur
explode($séparateur,$str) retourne un tableau dont les éléments résultent du hachage de
la chaîne $str par le délimiteur $séparateur
array_merge($tab1,$tab2…) concatène les tableaux passés en arguments
array_rand($tab) retourne un élément du tableau au hasard 26
Variables
Les variables prédéfinies
Contient le nom et la valeur de toutes les variables globales du script. Les noms des
$GLOBALS variables sont les clés de ce tableau. $GLOBALS["unevar"] récupère la valeur de la
variable $unevar en dehors de sa zone de visibilité (dans les fonctions, par exemple).
Contient le nom et la valeur des cookies enregistrés sur le poste client. Les noms des
$_COOKIE
cookies sont les clés de ce tableau.
Contient le nom et la valeur des variables d’environnement qui sont changeantes selon
$_ENV
les serveurs.
$_FILES Contient le nom des fichiers téléchargés à partir du poste client.
Contient le nom et la valeur des données issues d’un formulaire envoyé par la méthode
$_GET
GET. Les noms des champs du formulaire sont les clés de ce tableau.
Contient le nom et la valeur des données issues d’un formulaire envoyé par la méthode
$_POST
POST. Les noms des champs du formulaire sont les clés de ce tableau.
Contient l’ensemble des variables superglobales $_GET, $_POST, $_COOKIE et
$_REQUEST
$_FILES.
27
Variables

Les variables prédéfinies


$_SERVER Contient les informations liées au serveur Web, tel que le contenu des en-têtes HTTP ou le
nom du script en cours d’exécution. Retenons les variables suivantes :
$_SERVER["HTTP_ACCEPT_LANGUAGE"], qui contient le code de langue du navigateur
client.
$_SERVER["HTTP_COOKIE"], qui contient le nom et la valeur des cookies lus sur le poste
client.
$_SERVER["HTTP_HOST"], qui donne le nom de domaine.
$_SERVER["SERVER_ADDR"], qui indique l’adresse IP du serveur.
$_SERVER["PHP_SELF"], qui contient le nom du script en cours. Nous l’utiliserons
souvent dans les formulaires.
$_SERVER["QUERY_STRING"], qui contient la chaîne de la requête utilisée pour accéder
au script.

$_SESSION Contient l’ensemble des noms des variables de session et leurs valeurs.

28
Variables

Constantes
Pour définir des constantes personnalisées, nous utilisons la fonction define(), dont la
syntaxe est la suivante :

On attribue la valeur valeur_cte à la constante nommée nom_cte, dont le nom doit


être contenu dans une chaîne de caractères délimitée par des guillemets.

Le paramètre casse vaut TRUE si le nom de la constante est insensible à la casse et


FALSE sinon. La fonction define() retourne TRUE si la constante a bien été définie et
FALSE en cas de problème, par exemple, si vous essayez de redéfinir une constante
existante, ce qui est interdit. Toute tentative de modifier la valeur d’une constante en la
redéfinissant provoque un avertissement (warning) de la part du serveur. 29
Variables

Constantes
Exemple :

30
Variables

Concaténation, apostrophes, guillemets et echo


L’opérateur de concaténation des chaînes de caractères est "." (le point). La
concaténation permet de produire une chaine de caractères à partir de plusieurs
autres chaines. En conséquence, elle permet notamment de diminuer le nombre
d’instructions echo.

31
Variables

Concaténation, apostrophes, guillemets et echo


Si la chaîne de caractères à afficher contient un ou plusieurs caractères apostrophe, il
faut alors spécifier que ces derniers ne correspondent pas à la fin de la chaîne de
caractères à afficher mais à des caractères normaux. Autrement dit, l’interpréteur doit
voir ces caractères comme des caractères quelconques. On utilise alors le caractère
d’échappement \'. Par exemple : 'j\'ai l\'honneur de ...' .

32
Variables

Concaténation, apostrophes, guillemets et echo


Il est aussi possible de délimiter une chaîne de caractères avec les guillemets plutôt
que les apostrophes. L’utilisation est similaire, à la différence qu’il est possible
d’insérer des variables dans une chaîne de caractères délimitée par des guillemets.
L’interpréteur remplacera alors les variables par leurs valeurs lors de l’exécution du
code PHP.

33
Conditions

Les instructions de contrôle (instructions if) s’utilisent de manière similaire en PHP et


en C. La syntaxe est quasiment la même, excepté que le langage PHP possède
également l’instruction elseif. Comme en C, si plusieurs instructions doivent être
effectuées pour une valeur du test (vrai ou faux), ces instructions doivent être
délimitées par des accolades. Voici un exemple d’utilisation de structure de contrôle.

34
Conditions

Les opérations de comparaisons sont :


• < : Teste si le premier opérande est strictement inférieur au second.
• <= : Teste si le premier opérande est inférieur ou égal au second.
• > : Teste si le premier opérande est strictement supérieur au second.
• >= : Teste si le premier opérande est supérieur ou égal au second.
• == : Teste l’égalité de deux valeurs.
• != ou <> : Teste l’inégalité de deux valeurs.
• === : Teste l’identité des valeurs et des types de deux expressions.
• !== : Teste la non-identité de deux expressions.

Une condition peut être définie par plusieurs conditions reliées par les opérateurs
logiques and, &&, or et ||. Sachant que and équivaut à && et or équivaut à ||.

Le non logique est défini par l’opérateur " ! ".


35
Conditions

Il existe un opérateur très spécial qui équivaut à une structure conditionnelle complexe
if … else à la différence qu’il renvoie un résultat de valeur pouvant ne pas être un
booléen : l’opérateur ternaire.

Syntaxe : (condition) ? (expression1) : (expression2) ;

Si la condition est vrai alors évalue et renvoie l’expression1 sinon évalue et renvoie
l’expression2.

Exemple :

Dans cet exemple, la variable $nbr prend $var pour valeur si $var est strictement
supérieur à 10, sinon vaut le reste de la division entière de $var par 10.
36
Conditions

Un code PHP peut être simplifié sans multiplier les instructions if grâce à l’instruction
switch...case. Cette dernière permet de comparer la valeur d’une expression avec
une liste de valeurs prédéterminées.
Syntaxe : Exemple :

37
Boucles

Les boucles permettent de répéter des opérations élémentaires un grand nombre de


fois sans avoir à réécrire le même code. Selon l’instruction de boucle utilisée, le
nombre d’itérations peut être défini à l’avance ou être déterminé par une condition
particulière.

Le langage PHP accepte les instructions for, while et do ... while. Ces boucles
s’utilisent de la même manière qu’en langage C.

38
Boucles

Boucle for

Présente dans de nombreux langages, la boucle for permet d’exécuter plusieurs fois
la même instruction ou le même bloc sans avoir à réécrire les mêmes instructions. Sa
syntaxe est la suivante :

Où expression1 est toujours évaluée. Ensuite, expression2 est évaluée avec une
valeur booléenne : si elle vaut TRUE, la boucle continue et les instructions comprises
dans le bloc sont exécutées, sinon la boucle s’arrête. Si elle est toujours vraie on
obtient une boucle infinie, vérifiez donc qu’elle peut être fausse. expression3 n’est
exécutée qu’à la fin de chaque itération. 39
Boucles

Boucle for simple

Exemple :

40
Boucles

Boucle for à plusieurs variables

for ($i=1, $j=9; $i < 10, $j > 0; $i++, $j--) {


// $i varie de 1 à 9 et $j de 9 à 1
echo "<span style=\"border-style:double\">$i+$j=10</span>";
}

41
Boucles

Boucle for imbriquées


echo "<table>\n<tr><th> X </th>";
//Création de la première ligne
for($i=1;$i<5;$i++) echo "<th>$i</th>";
echo "</tr>\n";
for($i=1;$i<5;$i++) {
//Création de la première colonne
echo "<tr><th>$i</th>";
//Remplissage de la table
for($j=1;$j<5;$j++) echo "<td>".$i*$j."</td>";
echo "</tr>\n";
}
echo "</table>\n"; 42
Boucles

Boucle for imbriquées


<table>
<tr><th> X </th><th>1</th><th>2</th><th>3</th><th>4</th></tr>
<tr><th>1</th><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr><th>2</th><td>2</td><td>4</td><td>6</td><td>8</td></tr>
<tr><th>3</th><td>3</td><td>6</td><td>9</td><td>12</td></tr>
<tr><th>4</th><td>4</td><td>8</td><td>12</td><td>16</td></tr>
</table>

43
Boucles

Le langage PHP accepte les instructions while et do ... while. Ces boucles s’utilisent
de la même manière qu’en langage C. La syntaxe de ces instructions est la suivante :

Syntaxe de while : Exemple de while :

Syntaxe de do ... while : Exemple de do ... while :

44
Boucles

Parcours d’un tableau indicé


Voici trois différentes boucles pour parcourir le tableau suivant :

45
Boucles

Parcours d’un tableau associatif


Voici deux différentes boucles pour parcourir le tableau associatif suivant :

46
Fonctions

Les fonctions peuvent prendre des arguments dont il n’est pas nécessaire de spécifier
le type. Elles peuvent optionnellement retourner une valeur. Le mode de passage des
arguments est le passage par valeur (peut être forcé au passage par la référence
avec l’opérateur & : &$param). Le retour est aussi par valeur (par copie).

L’appel à une fonction peut ne pas respecter son prototypage (nombre de


paramètres). Les identificateurs de fonctions sont insensibles à la casse.

Exemple :

47
Fonctions

Le mot clé global permet de modifier la portée des variables locales à une fonction.
Le tableau associatif $GLOBALS permet d’accéder aux variables globales du script
($GLOBALS["var"] accède à la variable $var).

Exemple :

Le mot clé static permet de conserver la valeur d’une variable locale à une fonction
entre les différents appels à cette fonction.

48
Fonctions

Il est possible de donner une valeur par défaut aux arguments lors de la déclaration
d’une fonction. En conséquence, si un argument est « oublié » lors de l’appel de la
fonction, la valeur de cet argument sera la valeur par défaut.

Exemple :

49
Programmation objet

La programmation procédurale consiste à écrire des procédures ou des fonctions qui


effectuent des opérations sur les données, tandis que la programmation orientée objet
consiste à créer des objets contenant à la fois des données et des fonctions.

Les classes et les objets sont les deux principaux aspects de la programmation
orientée objet. Une classe est un modèle pour les objets et un objet est une
instance d'une classe.

50
Programmation objet

Supposons que nous ayons une classe nommée Employé. Un employé peut avoir des
propriétés comme le matricule, le nom, etc. Nous pouvons définir des variables
comme $matricule et $nom pour contenir les valeurs de ces propriétés.

Lorsque les objets individuels sont créés, ils héritent de toutes les propriétés et
comportements de la classe Employé, mais chaque objet aura des valeurs différentes
pour les propriétés le matricule, le nom, etc.

Une classe peut avoir des propriétés et des fonctions statiques. Ces propriétés et
fonctions peuvent être appelées directement sans créer d'instance de classe. Les
propriétés et les fonctions statiques sont déclarées avec le mot-clé static.

51
Programmation objet

52
Programmation objet

53
Gestion des exceptions

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. PHP5 fournit un
mécanisme qui permet de gérer les conséquences d’une erreur. Un gestionnaire
d’exception a donc le structure suivante :

54
Gestion des exceptions

Les méthodes de la classe Exception


__construct() Constructeur de la classe. 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. 55
Gestion des exceptions

Exemple :

56
Prof. Morad HAJJI

PHP
Hypertext Preprocessor
Partie 2

57
Plan

1 PHP & MySQL

2 Formulaire

3 Exemple

58
PHP & MySQL

PHP permet de générer automatiquement une page Web dynamique grâce à


l’exécution d’un script par le moteur PHP. Le code HTML généré est renvoyé par le
serveur au client. Cependant, parfois pour générer ce code HTML, le script peut avoir
besoin de données qui sont stockées en dehors du script, notamment dans des bases
de données. Dans ce cas, lors de l’exécution du script, l’interpréteur PHP interroge la
base de données via des requêtes SQL et utilise les informations récupérées pour
générer le code HTML.

59
PHP & MySQL

Le processus de génération de pages Web dynamiques peut être représenté par la


figure suivante :

60
PHP & MySQL

PHP & bases de données

L’accès aux bases de données dans un script PHP peut se faire de plusieurs
manières. En effet, il est possible d’utiliser :

 Une librairie spécifique au SGBD utilisé (MySQLi, OCI(Oracle), …) ;


 La librairie PHP Data Objects (PDO).

61
PHP & MySQL

PHP & bases de données

La librairie PDO implémente une interface entre PHP et n’importe quel SGBD tel que
Oracle, MySQL, PostgreSQL, etc. Pourquoi utiliser la librairie PDO ?

 elle permet d’interroger une base de données quel que soit le SGBD. En
conséquence, le changement du SGBD ne nécessite que la modification d’une
seule ligne de code dans le script PHP,

 elle facilite l’utilisation des requêtes préparées permettant de créer des requêtes
paramétrées et plus sécurisées.
62
PHP & MySQL

PDO : Connexion à la base de données

Pour accéder à une base de données, on utilise un objet de la classe PDO. Le


paramétrage et l’établissement de La connexion se fait lors de la construction de cet
objet avec le mot clé new.

À la création d’un objet PDO, on doit fournir au constructeur 3 paramètres de type


string : le DSN, le login et le mot de passe.

63
PHP & MySQL

PDO : Connexion à la base de données

Le paramètre Data Source Name (DSN) est une chaîne de caractères contenant les
informations requises pour se connecter à la base de données :

 le nom du pilote PDO (nom du SGBD : mysql, pgsql, etc),


 le nom du serveur sur lequel se trouve cette base.
 le nom de la base de données,

Le DSN suit la syntaxe spécifique :

"pilote:host=serveur;dbname=nomBd"
64
PHP & MySQL

PDO : Connexion à la base de données

Exemple : Supposons qu’on veut créer une connexion vers la base de données
(SGBD MySQL) bd_php_cours qui se trouve sur le serveur local, et si le login est root
dont le passe est vide, alors la création de l’objet PDO se fait selon l’instruction
suivante :

$bd = new PDO('mysql:host=localhost;dbname=bd_php_cours', 'root', '');

65
PHP & MySQL

PDO : Connexion à la base de données

Souvent, on ajoute juste après l’instanciation de l’objet PDO les instructions :

$bd->query("SET NAMES 'utf8'");


$bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

La première instruction indique que le script PHP communique avec la base de


données en utf-8.

La seconde indique qu’en cas d’erreur, une exception doit être levée, ce qui arrête le
script en affichant l’erreur, sauf si l’exception est rattrapée l’aide des blocs try/catch.
66
PHP & MySQL

PDO : Interrogation de la base de données

L’interrogation de la base de données se fait en trois étapes :

1. Préparation de la requête se fait via la méthode prepare de la classe PDO ;


2. Exécution de la requête grâce à la méthode execute de la classe PDOStatement.
3. Récupération de la réponse via la méthode fetch ou via la méthode fetchAll.

67
PHP & MySQL

PDO : Interrogation de la base de données

La méthode prepare prend en paramètre une requête SQL (string) et retourne un


objet de la classe PDOStatement correspondant à la requête optimisée. En cas
d’erreur lors de la préparation, une exception PDOException est levée.

La requête est exécutée grâce à la méthode execute de la classe PDOStatement. En


cas d’erreur, une exception est également levée.

La méthode fetch permet la récupération les résultats un par un, en revanche la


méthode fetchAll permet la récupération de tous les résultats en une seule fois.
68
PHP & MySQL

PDO : Interrogation de la base de données - fetch

La méthode fetch retourne la ligne suivante de la réponse, ou false si toutes les


lignes de la réponse ont déjà été retournées. Le type retourné dépend de la valeur
passée en paramètre :
 PDO::FETCH_ASSOC : la valeur retournée est un tableau associatif. Les clés sont les
noms des colonnes dans la requête et les valeurs celles de la ligne.
 PDO::FETCH_NUM : les clés associées aux valeurs sont les indices des colonnes de la
requête.
 PDO::FETCH_BOTH : le tableau retourné contient deux fois chaque valeur. Les clés sont
les noms et les indices des colonnes de la requête (le tableau correspond à l’union des
deux premiers tableaux). C’est la valeur par défaut.
 PDO::FETCH_OBJ : la valeur retournée est cette fois-ci un objet. Les noms des attributs
sont les noms de colonnes de la requête, les valeurs de ces attributs étant les valeurs de la
ligne. 69
PHP & MySQL

PDO : Interrogation de la base de données - fetch

Supposons que l’on veux interroger la table Client contenant les lignes suivantes :

70
PHP & MySQL

PDO : Interrogation de la base de données - fetch

$bd = new PDO('mysql:host=localhost;dbname=hotel', 'root', '');


$bd->query("SET NAMES 'utf8'");
$bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$requete = $bd->prepare('SELECT Nom, Prenom FROM client');


$requete->execute();

while ($ligne = $requete->fetch(PDO::FETCH_ASSOC)) {


echo '<p> Nom : '.$ligne['Nom'].' et prénom : '.$ligne['Prenom'].'</p>';}

Nom : Dhimen et prénom : Ahmed


Nom : Mokhtari et prénom : Asmae
Nom : Dribi et prénom : Amine
Nom : Lamrani et prénom : Loubna 71
PHP & MySQL

PDO : Interrogation de la base de données - fetchAll

La méthode fetchAll permet de récupérer toutes les lignes en une seule fois dans un
tableau, chaque case de ce tableau correspondant à une ligne de la réponse. Les clés
de ce tableau sont les indices ; les valeurs sont soient un tableau, soit un objet selon
la valeur passée en paramètre de la méthode fetchAll (PDO::FETCH_ASSOC,
PDO::FETCH_NUM, PDO::FETCH_BOTH ou PDO::FETCH_OBJ).

72
PHP & MySQL

PDO : Interrogation de la base de données - fetchAll

Après exécution du code suivant, on obtient la variable $tab, le résultat est le suivant :
$requete = $bd->prepare('SELECT Nom, Prenom FROM client');
$requete->execute();
$tab = $requete->fetchAll(PDO::FETCH_ASSOC);
foreach ($tab as $tab2) {
echo '<p> Nom : '.$tab2['Nom'].' et prénom : '.$tab2['Prenom'].'</p>';
}

Array ( Nom : Dhimen et prénom : Ahmed


[0]=>Array([Nom]=>Dhimen, [Prenom]=>Ahmed), Nom : Mokhtari et prénom : Asmae
[1]=>Array([Nom]=>Mokhtari, [Prenom]=>Asmae),
[2]=>Array([Nom]=>Dribi, [Prenom]=>Amine),
Nom : Dribi et prénom : Amine
[3]=>Array([Nom]=>Lamrani, [Prenom]=>Loubna) Nom : Lamrani et prénom : Loubna
) 73
PHP & MySQL

PDO : Interrogation de la base de données - rowCount

La méthode execute permet aussi la modification, l’insertion et la suppression des


données. Pour connaître le nombre des lignes affectés par une requête, il suffit
d’utiliser la méthode rowCount de la classe PDOStatement.

$requete = $bd->prepare(‘
INSERT INTO client values (1004,"Lamrani2","Loubna2","Rabat")
');
$requete->execute();
$nb = $requete->rowCount();
echo "<p> $nb cleints ont été ajoutés ! </p>";
74
PHP & MySQL

PDO : Interrogation de la base de données - Marqueurs de place

Les marqueurs de place permettent d’indiquer des endroits dans la requête SQL qui
seront remplacés par des valeurs au moment de l’exécution de cette requête. Les
marqueurs permettent donc d’exécuter plusieurs fois une même requête avec des
valeurs différentes. On appel ce type de requêtes des requêtes paramétrées.

De plus, lorsque les marqueurs sont utilisés pour insérer dans la requête SQL des
valeurs saisies par l’utilisateur, ils permettent de sécuriser la base de données contre
les attaques par injection SQL.
75
PHP & MySQL

PDO : Interrogation de la base de données - Marqueurs de place

Dans une requête SQL, un marqueur de place est un nom précédé par le symbole ":"
ou le point d’interrogation "?". Avant l’exécution de la requête, il faudra alors lier une
valeur à chacun des marqueurs de place contenus dans la requête, grâce à la
méthode bindValue. Cette méthode prend en paramètre un nom de marqueur (dans
de cas du symbole ":") ou son indice (dans le cas du point d’interrogation "?") et sa
valeur.

76
PHP & MySQL

PDO : Interrogation de la base de données - Marqueurs de place

Exemple de requête préparée avec des marqueurs de place :

77
PHP & MySQL

PDO : Interrogation de la base de données - Marqueurs de place

Exemple de requête préparée avec des marqueurs de place (avec : ) :


$requete = $bd->prepare(
"SELECT Nom, Prenom FROM client where Num_Client <= :Numero_Client
and Nom like :Nom_Client");
$requete->bindValue(':Numero_Client',1004);
$requete->bindValue(':Nom_Client',"%Lamrani%");
$requete->execute();
$tab = $requete->fetchAll(PDO::FETCH_ASSOC);
var_dump($tab);
foreach ($tab as $tab2) {
echo '<p> Nom : '.$tab2['Nom'].' et prénom : '.$tab2['Prenom'].'</p>';
}
78
PHP & MySQL

PDO : Interrogation de la base de données - Marqueurs de place

Exemple de requête préparée avec des marqueurs de place (avec : ) :


$requete = $bd->prepare(
"SELECT Nom, Prenom FROM client where Num_Client <= :Numero_Client
and Nom like :Nom_Client");
$requete->bindValue(':Numero_Client',1004);
$requete->bindValue(':Nom_Client',"%Lamrani%");
$requete->execute();
$tab = $requete->fetchAll(PDO::FETCH_ASSOC);
var_dump($tab);
foreach ($tab as $tab2) {
echo '<p> Nom : '.$tab2['Nom'].' et prénom : '.$tab2['Prenom'].'</p>';
}
79
PHP & MySQL

PDO : Interrogation de la base de données - Marqueurs de place

Exemple de requête préparée avec des marqueurs de place (avec ? ) :


$requete = $bd->prepare(
"SELECT Nom, Prenom FROM client where Num_Client <= ? and Nom like ?");

$requete->bindValue(1,1004);
$requete->bindValue(2,"%Lamrani%");
$requete->execute();
$tab = $requete->fetchAll(PDO::FETCH_ASSOC);
var_dump($tab);
foreach ($tab as $tab2) {
echo '<br> Nom : '.$tab2['Nom'].' et prénom : '.$tab2['Prenom'];
}

80
PHP & MySQL

PDO : Interrogation de la base de données - Marqueurs de place

Exemple de requête préparée avec des marqueurs de place (avec ? ) :


$requete = $bd->prepare(
"SELECT Nom, Prenom FROM client where Num_Client <= ? and Nom like ?");

$requete->bindValue(1,1004);
$requete->bindValue(2,"%Lamrani%");
$requete->execute();
$tab = $requete->fetchAll(PDO::FETCH_ASSOC);
var_dump($tab);
foreach ($tab as $tab2) {
echo '<br> Nom : '.$tab2['Nom'].' et prénom : '.$tab2['Prenom'];
}

81
Formulaire

Transmission des données dans l’url

La méthode la plus simple pour transmettre des informations à un script PHP consiste
à les mettre directement dans l’url. Le script cible récupérera ces informations dans le
tableau spécifique $_GET. Dans l’url, il faut alors spécifier un ou plusieurs couples de
clés/valeurs selon la syntaxe clé=valeur, les couples étant séparés par le symbole &.
Pour différencier l’adresse du fichier des couples clés/valeurs, il faut ajouter le
symbole ? avant le premier couple clé/valeur.

82
Formulaire

Transmission des données dans l’url

Exemple :
http://127.0.0.1/exemples_php/formulaire.php?nom=hajji&prenom=morad

Dans cet exemple, nous avons passé deux paramètres, à savoir nom/hajji et
prenom/morad. Le script formulaire.php peut alors utiliser ces informations grâce au
tableau $_GET. Les valeurs de $_GET sont les valeurs des paramètres et la clé
associée à chaque valeur étant le nom du paramètre.

83
Formulaire

Transmission des données dans l’url

Exemple :
http://127.0.0.1/exemples_php/formulaire.php?nom=hajji&prenom=morad

Le script peut par exemple afficher les différents couples clés/valeurs dans une liste
non ordonnée selon :
echo "<ul>\n";
foreach ($_GET as $cle => $val) {
echo "<li> ".$cle." : ".$val." </li>\n";
}
echo "</ul>\n";
84
Formulaire

Transmission des données dans l’url : Formulaire

Le passage d’arguments dans l’url fonctionne correctement. Mais, ce procédé n’est


pas confortable pour l’utilisateur. Dans le cas d’une inscription sur un site, par
exemple, la saisie de toutes les informations dans l’url devient extrêmement
fastidieuse à cause du nombre de paramètres. De plus, l’utilisateur ne connaît pas les
noms des paramètres que vous souhaitez qu’il saisisse (par exemple : nom et
prénom, etc). Un moyen beaucoup plus simple consiste alors à utiliser les
formulaires.

85
Formulaire

Transmission des données avec get

L’attribut method de la balise <form> sert à indiquer comment doivent être envoyées
les données saisies par l’utilisateur. Cet attribut peut prendre deux valeurs : get et
post. En choisissant get, on indique que les données doivent transiter via l’URL (sous
forme de paramètres). Ainsi, cette manière de procéder constitue un raccourci de la
transmission des données dans l’url. En effet, lorsque l’utilisateur clique sur le bouton
de soumission du formulaire, les données sont transposées dans la barre d’adresse
du navigateur et ajoutées à l’url du script spécifié dans l’attribut action.

86
Formulaire

Transmission des données avec get

Exemple :
<?php
if(!empty($_GET['nom'])){
echo "Votre nom est : \n<ul>\n ";
foreach ($_GET as $cle => $val) {
echo "<li> " . $cle . " : " . $val . " </li>\n";
}
echo "</ul>\n";
}
?>
<Form method="get" action="<?php echo $_SERVER["PHP_SELF"] ?>">
<label for="nom">Nom : </label>
<input type="text" name="nom" id="nom">
<input type="submit" value="Envoyer">
</Form> 87
Formulaire

Transmission des données avec post

Lors de la soumission du formulaire avec la méthode get, les paramètres se trouvent


dans l’url. Cette manière de procéder laisse apparaître les données transmises entre
le client et le serveur. Cependant, il est préférable de cacher les données,
particulièrement les données sensibles tels que les mots de passe, etc. Dans ce cas, il
suffit d’utiliser la méthode post dans la déclaration du formulaire.

88
Formulaire

Transmission des données avec post

Exemple :
<?php
if(!empty($_POST['nom'])){
echo "Votre information sont : \n<ul>\n ";
foreach ($_ POST as $cle => $val) {
echo "<li> " . $cle . " : " . $val . " </li>\n";
}
echo "</ul>\n";
}
?>
<Form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>">
<label for="nom">Nom : </label>
<input type="text" name="nom" id="nom">
<input type="submit" value="Envoyer">
</Form> 89
Formulaire

Données à valeurs multiples

Certains champs de formulaire peuvent permettre aux visiteurs de choisir plusieurs


valeurs sous un même nom de composant. Cela peut se produire dans deux cas :

1. Cases à cocher ayant le même attribut name ;


2. Liste de sélection dans laquelle l’attribut multiple="multiple" est défini.

90
Formulaire

Données à valeurs multiples – Création des champs

Dans tous les cas, il faut faire suivre le nom du composant de crochets ([ ]) dans la
définition du champ (contrôle) du formulaire, comme pour créer une variable de type
array. Cela, indique au navigateur que les données concernées par ce champ seront
récupérées sous la forme d’un tableau.

Si une option n’est pas choisie, l’élément correspondant dans le tableau sera
remplacer par l’élément correspondant à l’option suivante choisie. Si aucune option
n’est choisie, la variable de type tableau correspondant à ce champ ne sera pas
créée, c’est-à-dire la fonction isset retournera la valeur false dans ce cas.
91
Formulaire

Données à valeurs multiples – Création des champs

Exemple de liste :

<select name="langue[]" multiple="multiple" size=5>


<option value="ARA">Arabe</option>
<option value="DEU">Allemand</option>
<option value="ENG">Anglais</option>
<option value="ESP">Espagnole</option>
<option value="FRA">Français</option>
</select>

L’attribut multiple de l’élément HTML liste (<select>) change aussi le mode


d’affichage de cet élément. 92
Formulaire

Données à valeurs multiples – Création des champs

Exemple de cases à cochées :

<input name="periode[]" type="checkbox" value="matin">Matin<br />


<input name="periode[]" type="checkbox" value="midi">Midi<br />
<input name="periode[]" type="checkbox" value="apresmidi">Après-midi<br />
<input name="periode[]" type="checkbox" value="soir">Soir<br />

93
Formulaire

Données à valeurs multiples – Récupération des champs

Chaque fois que l’utilisateur choisi un élément de la liste précédente, vous pouvez
récupérer par programmation la valeur de cet élément comme suit :
$_POST["langue"][0] => qui contient la valeur "ARA"
$_POST["langue"][1] => qui contient la valeur "DEU"
$_POST["langue"][2] => qui contient la valeur "ENG"
$_POST["langue"][3] => qui contient la valeur "ESP"
$_POST["langue"][4] => qui contient la valeur "FRA"
<select name="langue[]" multiple="multiple" size=3>
<option value="ARA">Arabe</option>
<option value="DEU">Allemand</option>
<option value="ENG">Anglais</option>
<option value="ESP">Espagnole</option>
<option value="FRA">Français</option>
</select> 94
Formulaire

Données à valeurs multiples – Récupération des champs

Chaque fois que l’utilisateur coche un choix de l’élément checkbox précédent, vous
pouvez récupérer par programmation la valeur de ce choix comme suit :

$_POST["periode"][0] => qui contient la valeur "matin"


$_POST["periode"][1] => qui contient la valeur "midi"
$_POST["periode"][2] => qui contient la valeur "apresmidi"
$_POST["periode"][3] => qui contient la valeur "soir"

<input name="periode[]" type="checkbox" value="matin">Matin<br />


<input name="periode[]" type="checkbox" value="midi">Midi<br />
<input name="periode[]" type="checkbox" value="apresmidi">Après-midi<br />
<input name="periode[]" type="checkbox" value="soir">Soir<br />

95
Formulaire

Données à valeurs multiples – Récupération des champs (boucle)


<Form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>">
<label for="nom">Nom : </label> <input type="text" name="nom" id="nom"><br>
<fieldset><legend>Choix de langues : </legend>
<select name="langue[]" multiple="multiple" size=3>
<option value="ARA">Arabe</option> <option value="DEU">Allemand</option>
<option value="ENG">Anglais</option> <option value="FRA">Français</option>
</select><br><br>
</fieldset>
<fieldset><legend>Période souhaitée : </legend>
<input name="periode[]" type="checkbox" value="matin"> Matin<br />
<input name="periode[]" type="checkbox" value="midi"> Midi<br />
<input name="periode[]" type="checkbox" value="apresmidi"> Après-midi<br />
<input name="periode[]" type="checkbox" value="soir"> Soir<br />
</fieldset>
<br>
<input type="submit" value="Envoyer">
</Form>
96
Formulaire

Données à valeurs multiples – Récupération des champs (boucle)

97
Formulaire

Données à valeurs multiples – Récupération des champs (boucle)


echo "Vos informations sont : \n<ul>\n";
foreach ($_POST as $cle => $val) {
if (is_array($val)) {
echo "<li> " . $cle . " : \n <ul>\n";
foreach ($val as $value) {
echo "<li> " . $value . " </li>\n";
}
echo "</ul>\n </li>\n";
}
else {
if(!empty($_POST['nom'])) echo "<li> " . $cle . " : " . $val . " </li>\n";
}
}
echo "</ul>\n";

98
Formulaire

Données à valeurs multiples – Récupération des champs


echo "Votre information sont : \n<ul>\n";
<ul>
foreach ($_POST as nom
<li> $cle: => $val)
HAJJI {
</li>
if (is_array($val))
<li> langue{ :
echo "<li> " .<ul>
$cle . " : \n <ul>\n";
foreach ($val as $value)
<li> ARA{ </li>
echo "<li> " . $value . "</li>
<li> ENG </li>\n";
} </ul>
echo "</ul>\n
</li></li>\n";
} <li> periode :
else { <ul>
if(!empty($_POST['nom'])) echo
<li> matin "<li> " . $cle . " : " . $val . " </li>\n";
</li>
} <li> midi </li>
} </ul>
echo "</ul>\n";
</li>
</ul>
99
Formulaire

Données à valeurs multiples – Récupération des champs (boucle)

100
Exemple

Formulaire
<form method="post" action="action.php" >
<fieldset> <legend>Recherche d'emploi : complétez la fiche </legend>
Nom : <input type="text" name="nom"> Prénom : <input type="text" name="prenom">
<br /><br />Langues pratiquées<br />
<select name="lang[]" multiple="multiple">
<option value="ARA">Arabe</option>
<option value="ENG">Anglais</option>
<option value="FRA">Français</option>
</select><br /><br /> Compétences informatiques<br />
PHP<input type="checkbox" name="competent[]" value="PHP" />
MySQL<input type="checkbox" name="competent[]" value="MySQL" />
ASP.Net<input type="checkbox" name="competent[]" value="ASP.Net" /><br /><br />
<input type="submit" value="ENVOI"/>
<input type="reset" value="EFFACER"/>
</fieldset>
</form> 101
Exemple

Récupération des champs du formulaire


if(isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["lang"])
&& isset($_POST["competent"])){
echo "<table border=\"1\"><tr><th> Récapitulatif de votre fiche d'information
personnelle</th></tr><tr><td>";
$v_nom=$_POST["nom"]; $v_prenom=$_POST["prenom"]; $v_lang = $_POST["lang"];
$v_competent=$_POST["competent"];
echo "Vous êtes :<b> $prenom ", stripslashes($v_nom) ,"</b><br />";
var_dump($v_lang);
echo "Vous parlez : <ul>";
foreach($v_lang as $valeur){ echo " <li> $valeur </li>"; }
echo "</ul>";
var_dump($v_competent);
echo "Vous avez des compétences informatiques en : <ul>";
foreach($v_competent as $valeur){ echo "<li> $valeur </li> "; }
echo "</ul> </td></tr>";
} 102
Exemple

Récupération des champs - cas 1

103
Exemple

Récupération des champs – cas 2

104

Vous aimerez peut-être aussi