Académique Documents
Professionnel Documents
Culture Documents
PHP Est Meknès 2023
PHP Est Meknès 2023
Morad HAJJI
PHP
Hypertext Preprocessor
Partie 1
1
Plan
1 Introduction
2 Variables
3 Conditions
4 Boucles
5 Fonctions
6 Programmation objet
2
Introduction
3 - Visualisation 4 - Visualisation
de la page de la page
2 - Génération de
la page HTML
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
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 :
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
8
Variables
Types de données
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.
10
Variables
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
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.
Exemple :
15
Variables
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 (' ').
17
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
24
Variables
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
$_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 :
Constantes
Exemple :
30
Variables
31
Variables
32
Variables
33
Conditions
34
Conditions
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 à ||.
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.
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
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
Exemple :
40
Boucles
41
Boucles
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 :
44
Boucles
45
Boucles
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).
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
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
Exemple :
56
Prof. Morad HAJJI
PHP
Hypertext Preprocessor
Partie 2
57
Plan
2 Formulaire
3 Exemple
58
PHP & MySQL
59
PHP & MySQL
60
PHP & MySQL
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 :
61
PHP & MySQL
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
63
PHP & MySQL
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 :
"pilote:host=serveur;dbname=nomBd"
64
PHP & MySQL
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 :
65
PHP & MySQL
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
67
PHP & MySQL
Supposons que l’on veux interroger la table Client contenant les lignes suivantes :
70
PHP & MySQL
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
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>';
}
$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
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
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
77
PHP & MySQL
$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
$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
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
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
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
85
Formulaire
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
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
88
Formulaire
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
90
Formulaire
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
Exemple de liste :
93
Formulaire
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
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 :
95
Formulaire
97
Formulaire
98
Formulaire
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
103
Exemple
104