0% ont trouvé ce document utile (0 vote)
50 vues42 pages

Cours Complet de PHP pour Débutants

appprendre php

Transféré par

Topogo Toure
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
50 vues42 pages

Cours Complet de PHP pour Débutants

appprendre php

Transféré par

Topogo Toure
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

COURS DE PHP

Introduction

PHP: Hypertext Preprocessor, plus connu sous son sigle PHP, est un langage de
programmation libre, principalement utilisé pour produire des pages Web
dynamiques via un serveur HTTP. PHP est un langage impératif orienté objet.
Il s'agit d'un langage de script interprété côté serveur.

Il est considéré comme une des bases de la création de sites web dits
dynamiques mais également des applications web. PHP a permis de créer un
grand nombre de sites web célèbres, comme Facebook, Wikipédia, etc.

Le logo considéré comme officiel du PHP est l'éléPHPant avec l'acronyme PHP
sur son côté. Il est créé en 1998 par Vincent Pontier.

HISTORIQUE

Le langage PHP fut créé en 1994 par Rasmus Lerdorf pour son site web.
C’était à l’origine une bibliothèque logicielle écrite d’abord en langage Perl,
puis en langage C. Il s’en servait pour conserver une trace des visiteurs qui
venaient consulter son CV. PHP signifiait alors Personal Home Page tools. Le
code source de PHP fut publié par son auteur en 1996. En 1997, deux
étudiants, Andi Gutmans et Zeev Suraski, redéveloppèrent le cœur de PHP
puis son moteur interne, aboutissant à ce qu’on appelle le Zend Engine.
Depuis les versions du langage se sont succédées, apportant leur lot
d’améliorations et corrigeant les (nombreuses) failles de sécurité apparues en
chemin. La version 5 de PHP, sortie en 2004, utilise Zend Engine 2 et introduit
un véritable modèle objet, une gestion des erreurs fondée sur le modèle des
exceptions, ainsi que des fonctionnalités de gestion pour les entreprises.

1
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

FONCTIONNEMENT

Même s’il peut être utilisé en ligne de commande, PHP est principalement
associé à un serveur Web utilisant le protocole HTTP dans le cadre d’une
architecture client/serveur.

Un serveur Web en architecture trois tiers est composé d'un système


d'exploitation, un serveur HTTP, un langage serveur et enfin un système de
gestion de base de données (SGBD), cela constituant une plate-forme.

Dans le cas de PHP comme langage serveur, les combinaisons les plus
courantes sont celles d'une plateforme LAMP (pour Linux Apache MySQL
PHP) et WAMP (Windows Apache MySQL PHP). Une plate-forme WAMP
s'installe généralement par le biais d'un seul logiciel qui intègre Apache,
MySQL et PHP, par exemple EasyPHP et WampServer. Il existe le même type
de logiciels pour les plates-formes MAMP (Mac OS Apache MySQL PHP), à
l'exemple du logiciel MAMP.

1. Le client, le plus souvent un navigateur web, envoie une requête HTTP au


travers d'une URL vers un serveur.
2. Le serveur identifie la page à renvoyer.

2
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

o S'il s'agit d'un document pouvant être envoyé immédiatement, il l'envoie


o S'il s'agit d'un document nécessitant une interprétation, comme le PHP, il va
d'abord le traiter.
3. Le document PHP est alors interprété en faisant éventuellement appel à des
données externes provenant d'un serveur de bases de données.
L’interprétation de la page PHP produit un document, souvent une page
HTML, fourni au serveur.
4. L’interprétation de la page PHP produit une page HTML de résultat fournie au
serveur.
5. Le serveur Web renvoie ce document, cette page, au client pour affichage.

SYNTAXE

PHP appartient à la grande famille des descendants du C, dont les syntaxes


sont très proches. En particulier, sa syntaxe et sa construction ressemblent à
celles des langages Java et Perl, à ceci près que du code PHP peut
facilement être mélangé avec du code HTML au sein d'un fichier PHP.

Dans la suite, nous allons découvrir la syntaxe du PHP. Celle-ci est très proche
de la syntaxe du C. Il existe cependant quelques différences. Le PHP est un
langage de plus haut niveau que le C. Il permet donc de réaliser certaines
manipulations plus simplement qu'en C.

Exemple
L'exemple ci-dessous présente un simple script PHP intégré dans une page
HTML. Le résultat de l'exécution produit une page HTML qui doit encore être
interprétée par un navigateur.

<html>
<head>
<title>Exemple</title>
</head>
<body>
<?php
echo "C'est un script PHP!\n";
?>
</body>
</html>

echo Affiche une chaîne de caractères.

3
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Syntaxe de base

Le PHP doit être délimité par les balises ouvrante <?php et fermante ?>.
Lorsque PHP traite un fichier, il cherche les balises d'ouverture et de fermeture
qui délimitent le code qu'il doit interpréter. De cette manière, cela permet à
PHP d'être intégré dans toutes sortes de documents, car tout ce qui se trouve
en dehors des balises ouvrantes / fermantes de PHP est ignoré.

<p>Ceci sera ignoré par PHP et affiché au navigateur.</p>


<?php echo "Alors que ceci sera analysé par PHP.\n"; ?>
<p>Ceci sera aussi ignoré par PHP et affiché au navigateur.</p>

Comme en C ou en Perl, PHP requiert que les instructions soient terminées


par un point-virgule à la fin de chaque instruction.

PHP supporte les commentaires de type C, C++ et Shell Unix (aussi appelé
style Perl). Par exemple :

<?php

echo "Ceci est un test\n"; // Ceci est un commentaire sur une seule ligne, style c++
/* Ceci est un commentaire sur
plusieurs lignes */

echo "Ceci est un autre test\n";

echo "Et un test final\n"; # Ceci est un commentaire style shell sur une seule ligne

?>

Comme mentionné précédemment, la syntaxe et les instructions de contrôle


du PHP sont largement inspirées du C. Les deux différences les plus notables
sont :

 la syntaxe des variables. Le langage est non-typé, il ne faut donc pas déclarer
les variables. Afin de pouvoir les identifier malgré tout, les variables sont
toujours précédées du symbole $.
 la non-présence d'une fonction main dans le code.
 le paradigme événementiel plutôt que séquentiel. L'intégralité du script est
exécutée d'un seul coup sans arrêt.
o Le PHP va réagir à un événement, envoyer une requête au serveur via le
navigateur et recevoir un réponse.
o Le C exécute tour à tour chaque ligne de code en marquant un arrêt sur
certaines instructions nécessitant l'action de l'utilisateur.

4
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Les variables

En PHP, les variables commencent toujours par un $ suivi du nom de la variable. Le nom est
sensible à la casse.
<?php
//une variable
$ma_variable = 5;
?>

Le type d'une variable n'est généralement pas défini par le programmeur ; il sera défini par
PHP au moment de l'exécution, suivant le contexte dans lequel la variable est utilisée.

<?php

$a_bool = TRUE; // un booléen

$a_str = "foo"; // une chaîne de caractères

$a_str2 = 'foo'; // une chaîne de caractères

$an_int = 12; // un entier

echo gettype($a_bool) ."\n"; // affiche : boolean

echo gettype($a_str) ."\n"; // affiche : string

var_dump($an_int);

var_dump($a_str2);

?>

 var_dump() : Affiche les informations structurées d'une variable, y compris son type et sa valeur.
Les tableaux et les objets sont explorés récursivement, avec des indentations, pour mettre en valeur
leur structure.
 gettype() : Retourne le type d'une variable.

Les types de variables

Bien que le PHP soit un langage non-typé, des types sont bien définis pour les variables.

BOOLEAN
C'est le type le plus simple. Un booléen représente une valeur de vérité. Il peut valoir TRUE
ou FALSE.

5
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<?php
$ma_variable = true; //assigne la valeur TRUE à $ma_variable
?>
Une page sera consacrée aux opérateurs booléen et de comparaison.

NUMBER
Number est un pseudo type indiquant qu'il peut s'agir aussi bien d'un entier que d'un nombre
décimal.

INTEGER
Un entier est un nombre appartenant à la classe Z={...,−2,−1,0,1,2,...}.

Les entiers peuvent être spécifiés en notation décimale (base 10), hexadécimale (base 16),
octale (base 8), ou binaire (base 2). L'opérateur de négation peut être utilisé pour désigner un
entier négatif.

<?php
$a = 1234; // un nombre décimal
$a = -123; // un nombre négatif
$a = 0123; // un nombre octal (équivalent à 83 en décimal)
$a = 0x1A; // un nombre héxadecimal (équivalent à 26 en décimal)
$a = 0b11111111; // un nombre binaire (équivalent à 255 en decimal)
?>

FLOAT
Les nombres décimaux (aussi connus comme nombres à virgule flottante, "floats", "doubles",
ou "real numbers") peuvent être spécifiés en utilisant les syntaxes suivantes :

<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>

OPERATEURS
Les opérateurs mathématiques du PHP sont repris dans le tableau ci-après.

6
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

EXEMPLE NOM

-$a Négation

$a + $b Addition

$a - $b Soustraction

$a * $b Multiplication

$a / $b Division

$a % $b Modulus

$a ** $b Exponentielle

L'opérateur de division / retourne une valeur à virgule flottante. Pour la division entière, il
faut utiliser la fonction intdiv.

<?php

$a=7;

$b=2;

var_dump(-$a);

var_dump($a+$b);

var_dump($a-$b);

var_dump($a*$b);

var_dump($a/$b);

var_dump($a%$b);

var_dump($a**$b);

var_dump(intdiv($a,$b));

?>

7
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

STRING
Une chaîne de caractères est une série de caractères. Une chaîne de caractères littérale peut
être spécifiée de 4 façons différentes :

 Entourée de guillemets simples '. Le contenu de la chaîne n'est pas analysé.


 Entourée de guillemets doubles ". Le contenu de la chaîne est analysé, les variables sont remplacées
par leur valeur.
 Syntaxe Heredoc qui se comporte comme les guillemets doubles.
 Syntaxe Nowdoc qui se comporte comme les guillemets simples.
<?php

$a = "Hello World";

echo 'J\'affiche : $a';

echo "\n";

echo "J'affiche : $a\n";

//Heredoc

echo <<<SYMBOL

J'affiche $a

Et sur plusieurs lignes simplement avec indentation.

SYMBOL;

//Nowdoc

echo <<<'SYMBOL'

J'affiche $a

Et sur plusieurs lignes simplement avec indentation.

SYMBOL;

?>

OPERATEUR (STRING)
Il y a deux opérateurs de chaînes de caractères string. Le premier est l'opérateur de
concaténation ., qui retourne la concaténation de ses deux arguments. Le second est
l'opérateur d'affectation concaténant .=.
<?php

$a = "Hello";

echo $a . " world\n";

$a .= " world !";

echo $a;

?>

8
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

LES TYPES COMPOSES


Les types composés sont construits par la composition d'une ou plusieurs variables de type
scalaire (boolean, integer, float et string) ou de type composé.

ARRAY
Un tableau en PHP est en fait une carte ordonnée. Une carte est un type qui associe des
valeurs à des clés. On parlera de tableau associatif. Pour définir un tableau on utilise le mot-
clé array ou les [ ].
Une page sera consacrée à l'usage des tableaux en PHP.
<?php

//Avec un index numérique

$table = array(1,2,3,4); //Affiche tout le tableau grâce au var_dump

var_dump($table);

// Avec des clés associatives

$array = array(

"foo" => "bar",

"bar" => "foo",

);

var_dump($array['foo']); //Affiche l'entrée associée à la clé 'foo'

// depuis PHP 5.4

$tableau = [

"foo" => "bar",

"bar" => "foo",

];

var_dump($tableau['bar']); //Affiche l'entrée associée à la clé 'bar'

?>

object
Il s'agit d'objet dans le cadre de la programmation orientée objet qui ne fait pas partie de ce
cours.

9
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Les types spéciaux


resource
Une ressource est une variable spéciale, contenant une référence vers une ressource externe.
Les ressources sont créées et utilisées par des fonctions spéciales.

Une ressource représente un fichier ouvert, une connexion à une base de données, une image,
etc. Lors de la connexion à une base de données, nous manipulerons une ressource. Il faudra
donc la manipuler avec des fonctions spécifiques.

NULL
La valeur spéciale NULL représente une variable sans valeur. NULL est la seule valeur
possible du type NULL.

Une variable est considérée comme null si :

 elle s'est vue assigner la constante NULL.


 elle n'a pas encore reçu de valeur.
 elle a été effacée avec la fonction unset().

Les variables dynamiques

Il est pratique d'avoir parfois des noms de variables qui sont variables. C'est-à-dire un nom de
variable qui est affecté et utilisé dynamiquement. Une variable classique est affectée avec
l'instruction suivante :

<?php
$a = 'bonjour';
?>

Une variable dynamique prend la valeur d'une variable et l'utilise comme nom d'une autre
variable. Dans l'exemple ci-dessous, bonjour peut être utilisé comme le nom d'une variable en
utilisant le "$$" précédent la variable. C'est-à-dire :

<?php
$a = 'bonjour';
$$a = 'monde';
?>

10
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
À ce niveau, deux variables ont été définies et stockées dans l'arbre des symboles PHP : $a
avec comme valeur "bonjour" et $bonjour avec comme valeur "monde".

<?php

$a = 'bonjour';

$$a = 'monde';

echo "$a ${$a}";

?>

Afin de pouvoir utiliser les variables dynamiques avec les tableaux, vous avez à résoudre un
problème ambigu. Si vous écrivez $$a[1], l'analyseur a besoin de savoir si vous parlez de la
variable qui a pour nom $a[1] ou bien si vous voulez l'index [1] de la variable $$a. La syntaxe
pour résoudre cette ambiguïté est la suivante : ${$a[1]} pour le premier cas et ${$a}[1] pour
le deuxième.

Les constantes

Une constante est un identifiant (un nom) qui représente une valeur simple. Comme son nom
le suggère, cette valeur ne peut jamais être modifiée durant l'exécution du script. Par défaut, le
nom d'une constante est sensible à la casse. Par convention, les constantes sont toujours en
majuscules.

<?php

define("FOO","Hello");

echo FOO . "World";

?>

Opérateurs logiques et de comparaison

Le plus souvent les opérateurs logiques et de comparaison sont utilisés en tant qu'expression
booléenne simple ou complexe dans les conditions de boucle ou les alternatives.

Opérateurs logiques
11
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Le tableau ci-dessous reprend la liste des opérateurs logiques par ordre de priorité.

EXEMPLE NOM RÉSULTAT

! $a Not (Non) TRUE si $a n'est pas TRUE.

$a && $b And (Et) TRUE si $a ET $b sont TRUE.

$a || $b Or (Ou) TRUE si $a OU $b est TRUE.

$a and $b And (Et) TRUE si $a ET $b valent TRUE.

$a xor $b XOR TRUE si $a OU $b est TRUE, mais pas les deux en même temps.

$a or $b Or (Ou) TRUE si $a OU $b valent TRUE.

<?php
$a=true;
$b=false;

var_dump($a && $b);


var_dump($a or $b);
var_dump($a xor $a);

//Les réponses des deux lignes ci-


après sont différentes à cause de la priorité des opérateurs.
var_dump($a || $b and $b);
var_dump($a || $b && $b);
?>

12
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Opérateurs de comparaison
Les opérateurs de comparaison, comme leur nom l’indiquent, vous permettent de comparer
deux valeurs.

EXEMPLE NOM RÉSULTAT

$a == $b Egal TRUE si $a est égal à $b après le transtypage.

$a === $b Identique TRUE si $a est égal à $b et qu'ils sont de même type.

$a != $b Différent TRUE si $a est différent de $b après le transtypage.

$a <> $b Différent TRUE si $a est différent de $b après le transtypage.

$a !== $b Différent TRUE si $a est différent de $b ou bien s'ils ne sont pas du même type.

$a < $b Plus petit TRUE si $a est strictement plus petit que $b.

$a > $b Plus grand TRUE si $a est strictement plus grand que $b.

Inférieur ou
$a <= $b TRUE si $a est plus petit ou égal à $b.
égal

Supérieur ou
$a >= $b TRUE si $a est plus grand ou égal à $b.
égal

<?php
$a=1;
$b='1';

var_dump($a==$b);
var_dump($a===$b);
?>

13
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Il existe un dernier opérateur un peu différent :

$a <=> $b Combiné Un entier inférieur, égal ou supérieur à zéro lorsque $a est respectivement inférieur

<?php
var_dump(1<=>1);
var_dump(1<=>2);
var_dump(2<=>1);
?>

LES FONCTIONS

Deux fonctions peuvent encore être utiles lors d'opérations de test :

 isset() - Détermine si une variable est définie et est différente de NULL.


 empty() - Détermine si une variable est vide. Les valeurs ci-dessous sont considérées comme
étant vides :
o "" (une chaîne vide)
o 0 (0 en tant qu'entier)
o 0.0 (0 en tant que nombre à virgule flottante)
o "0" (0 en tant que chaîne de caractères)
o NULL
o FALSE
o array() (un tableau vide)

<?php
var_dump(isset($a));
$a="";
var_dump(isset($a));
var_dump(empty($a));
?>

14
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Les tableaux

Un tableau en PHP est en fait une carte ordonnée. Une carte est un type qui
associe des valeurs à des clés. On parlera de tableau associatif. Pour définir
un tableau, on utilise le mot-clé array ou les [ ].

Les clés dans un tableau peuvent être de deux types :

1. numérique ;
2. chaîne de caractères.

Un même tableau peut utiliser à la fois des clés numériques et des clés
chaînes de caractères.

<?php

$tab1 = array(1, 2, 3);

$tab2 = array("un" => 1, "deux" => 2, "trois" => 3);

$tab3 = array(1, "deux" => 2, 3);

var_dump($tab1);

var_dump($tab2);

var_dump($tab3);

?>

L'ordre dans lequel sont rangées les clés numériques ne dépend pas de la
valeur numérique mais de l'ordre de définition. De même, toutes les valeurs de
clés numériques ne doivent pas obligatoirement exister.

<?php

$tab[0]=1;

$tab[3]=5;

$tab[7]=3;

$tab[1]=7;

$tab[5]=1;

var_dump($tab);

?>

15
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Les types dans les tableaux


Les tableaux sont construits de la composition d'une ou plusieurs variables de
type scalaire (boolean, integer, float et string) ou de type composé.

Une grande différence avec un langage comme le C est qu'un tableau peut
contenir simultanément différents types de variables.

<?php

$tab["chaine"] = "Bonjour";

$tab["booleen"] = true;

$tab["entier"] = 5;

$tab["decimal"] = 5.6;

var_dump($tab);

?>

Tableaux multidimensions
Comme précisé ci-dessus, un tableau peut contenir des types scalaires et/ou
des types composés. Un tableau multidimensionnel est un tableau contenant
d'autres tableaux. Contrairement à un langage comme le C, le tableau n'a pas
nécessairement la même dimension sur chacune de ses entrées. Cela vient
du fait que chaque entrée peut posséder des types différents.

<?php

$tab = array(

array(1,2,3),

"ma_table" => array("ce","que","je","veux"),

"clé" => array(1,"deux","trois", 7 => 7),

array("chaine",true),

"un simple scalaire"

);

var_dump($tab);

?>

16
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Opérateurs

EXEMPLE NOM RÉSULTAT

$a + $b Union Union de $a et $b.

$a == $b Egalité TRUE si $a et $b contiennent les mêmes paires clés/valeurs.

$a === $b Identique TRUE si $a et $b contiennent les mêmes paires clés/valeurs dans

$a != $b Inégalité TRUE si $a n'est pas égal à $b.

$a <> $b Inégalité TRUE si $a n'est pas égal à $b.

Non-
$a !== $b TRUE si $a n'est pas identique à $b.
identique

<?php

$a = array("a" => "pomme", "b" => "banane");

$b = array("b" => "banane", "a" => "pomme");

var_dump($a==$b);

var_dump($a===$b);

?>

L'opérateur + retourne le tableau de gauche auquel sont ajoutés les éléments


du tableau de droite. Pour les clés présentes dans les 2 tableaux, les éléments
du tableau de gauche seront utilisés alors que les éléments correspondants
dans le tableau de droite seront ignorés.

<?php

$a = array("a" => "pomme", "b" => "banane");

$b = array("a" =>"poire", "b" => "fraise", "c" => "cerise");

$c = $a + $b; // Union de $a et $b

echo "Union de \$a et \$b : \n";

var_dump($c);
17
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
$c = $b + $a; // Union de $b et $a

echo "Union de \$b et \$a : \n";

var_dump($c);

?>

LES CONDITIONS

IF
L'instruction if est une des plus importantes instructions de tous les langages, PHP inclus.
Elle permet l'exécution conditionnelle d'une partie de code.

Comme nous l'avons vu dans le paragraphe consacré aux expressions, une expression est
convertie en sa valeur booléenne. Si l'expression vaut TRUE, PHP exécutera l'instruction et si
elle vaut FALSE, l'instruction sera ignorée.

Les fonctionnalités de l'instruction if sont les mêmes en PHP qu'en C :

<?php
$a=5;
$b=3;
if ($a > $b) {
echo "a est plus grand que b";
}
?>

ELSE
Souvent, vous voulez exécuter une instruction si une condition est remplie, et une autre
instruction si cette condition n'est pas remplie. C'est à cela que sert else. else fonctionne
après un if et exécute les instructions correspondantes au cas où l'expression du if est
FALSE. Dans l'exemple suivant, ce bout de code affiche a est plus grand que b si la variable
$a est plus grande que la variable $b, et a est plus petit que b sinon :

<?php
$a=2;
$b=3;
if ($a > $b) {
echo "a est plus grand que b";
}
else {
echo "a est plus petit que b";
}
?>

ELSEIF / ELSE IF
18
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

elseif, comme son nom l'indique, est une combinaison de if et de else. Comme
l'expression else, il permet d'exécuter une instruction après un if dans le cas où le
"premier" if est évalué comme FALSE. Mais, à la différence de l'expression else, il
n'exécutera l'instruction que si l'expression conditionnelle elseif est évaluée comme TRUE.
L'exemple suivant affichera a est plus grand que b, a est égal à b ou a est plus petit que b :
<?php
$a=5;
$a=5;
if ($a > $b) {
echo "a est plus grand que b";
} elseif ($a == $b) {
echo "a est égal à b";
} else {
echo "a est plus petit que b";
}
?>

switch
L'instruction switch équivaut à une série d'instructions if. En de nombreuses occasions, vous
aurez besoin de comparer la même variable (ou expression) avec un grand nombre de valeurs
différentes, et d'exécuter différentes parties de code suivant la valeur à laquelle elle est égale.
C'est exactement à cela que sert l'instruction switch.

<?php
$i=1;
switch ($i) {
case 0:
echo "i égal 0";
break;
case 1:
echo "i égal 1";
break;
case 2:
echo "i égal 2";
break;
default:
echo "i n'est ni égal à 2, ni à 1, ni à 0.";
}
?>

Le break est nécessaire pour arrêter l'exécution à la fin du case. Sans cela, les instructions
du case suivant seront également exécutées.
Le default est utilisé si aucune évaluation de case n'était vraie.

Alternative ternaire

19
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Un autre opérateur conditionnel est l'opérateur ternaire ? avec : L'expression (expr1) ?


(expr2) : (expr3) est évaluée à expr2 si expr1 est évaluée à TRUE, et expr3 si expr1 est
évaluée à FALSE.
5
<?php
$a=-6;
echo ($a<0) ? "Négatif" : "Positif";
?>

while
La boucle while est le moyen le plus simple d'implémenter une boucle en PHP. Cette boucle
se comporte de la même manière qu'en C.
La signification d'une boucle while est très simple. PHP exécute l'instruction tant que
l'expression de la boucle while est évaluée comme TRUE. La valeur de l'expression est
vérifiée à chaque début de boucle, et, si la valeur change durant l'exécution de l'instruction,
l'exécution ne s'arrêtera qu'à la fin de l'itération. Si l'expression du while est FALSE avant la
première itération, l'instruction ne sera jamais exécutée.

<?php
$i = 1; //Essayer avec $i qui vaut 10
while ($i < 10) {
echo $i . " ";
$i++;
}
?>

do while
Les boucles do while ressemblent beaucoup aux boucles while, mais l'expression est testée
à la fin de chaque itération plutôt qu'au début. La principale différence par rapport à la
boucle while est que la première itération de la boucle do while est toujours exécutée.

<?php
$i = 1; //Essayer avec $i qui vaut 10
do {
echo $i . " ";
$i++;
} while ($i < 10);
?>

for
Les boucles for sont généralement utilisées quand le nombre d'itérations est connu à l'avance.
for (expr1; expr2; expr3)
commandes

La première expression (expr1) est évaluée (exécutée), quoi qu'il arrive au début de la boucle.

20
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Au début de chaque itération, l'expression expr2 est évaluée. Si l'évaluation vaut TRUE, la
boucle continue et les commandes sont exécutées. Si l'évaluation vaut FALSE, l'exécution de
la boucle s'arrête.

À la fin de chaque itération, l'expression expr3 est évaluée (exécutée).

<?php
for ($i = 1; $i < 10; $i++) {
echo $i . " ";
}
?>

foreach

La structure de langage foreach fournit une façon simple de parcourir des tableaux. foreach ne
fonctionne que pour les tableaux et les objets, et émettra une erreur si vous tentez de l'utiliser
sur une variable de type différent ou une variable non initialisée.

La première forme passe en revue le tableau array_expression. À chaque itération, la valeur


de l'élément courant est assignée à $value et le pointeur interne de tableau est avancé d'un
élément.

foreach (array_expression as $value){


//commandes
}

La seconde forme assignera en plus la clé de l'élément courant à la variable $key à chaque
itération.

foreach (array_expression as $key => $value){


//commandes
}

<?php
$arr = array(1, 2, 3, 4); //Ajouter des éléments au tableau
foreach ($arr as $valeur) {
echo $valeur . "\n";
}

echo "\n";

foreach ($arr as $cle => $valeur) {


echo '$arr[' . $cle . "] = " . $valeur . "\n";
}
?>

21
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Les fonctions

En PHP, les fonctions n'ont pas besoin d'être définies avant d'être utilisées. Les noms de
fonction sont insensibles à la casse, et il est généralement admis que les fonctions doivent être
appelées avec le nom utilisé dans leur déclaration, y compris la casse.

Une fonction peut être définie en utilisant la syntaxe suivante :

<?php
function foo()
{
echo "Exemple de fonction.\n";
}
?>

Les arguments de fonction


Des informations peuvent être passées à une fonction en utilisant une liste d'arguments, dont
chaque expression est séparée par une virgule. Les arguments seront évalués depuis la gauche
vers la droite.

<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Exemple de fonction.\n";
}
?>

Passage d'arguments par référence


Par défaut, les arguments sont passés à la fonction par valeur (aussi, changer la valeur d'un
argument dans la fonction ne change pas sa valeur à l'extérieur de la fonction). Si vous voulez
que vos fonctions puissent changer la valeur des arguments, vous devez passer ces arguments
par référence.

<?php

$var1=5;

$var2=9;

echo "var1=$var1\n";

echo "var2=$var2\n";

// L'échange attendu ne se produira pas car la fonction à reçu uniquement la valeur de


la variable.

22
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
echange($var1,$var2);

echo "var1=$var1\n";

echo "var2=$var2\n";

function echange($a,$b) {

$tmp=$a;

$a=$b;

$b=$tmp;

?>

Si vous voulez qu'un argument soit toujours passé par référence, vous pouvez ajouter
un & devant l'argument dans la déclaration de la fonction.

<?php

$var1=5;

$var2=9;

echo "var1=$var1\n";

echo "var2=$var2\n";

echange($var1,$var2);

echo "var1=$var1\n";

echo "var2=$var2\n";

function echange(&$a,&$b) {

$tmp=$a;

$a=$b;

$b=$tmp;

?>

Les valeurs de retour


Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous les types de
variables peuvent être renvoyés, tableaux et objets compris. Cela fait que la fonction finit son
exécution immédiatement et passe le contrôle à la ligne appelante.

<?php

23
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
function foo($arg_1, $arg_2, /* ..., */ $arg_n)

echo "Exemple de fonction.\n";

return $retval;

?>

Valeur par défaut des arguments


Vous pouvez définir des valeurs par défaut pour les arguments de type scalaire.

<?php

WhatToDoWithBeer("Servir","une Leffe");

WhatToDoWithBeer("Affoner");

WhatToDoWithBeer(NULL,"une Maes");

WhatToDoWithBeer();

function WhatToDoWithBeer($do="Boire",$beer="une Jupiler") {

echo $do . " " . $beer . "\n";

?>

Les arguments avec une valeur par défaut ne sont plus obligatoires. Il faut cependant que les
arguments non-définis soient les derniers paramètres de la fonction pour ne pas devoir les
renseigner.

Nombre d'arguments variable


Le point précédent nous amène à la possibilité de définir un nombre variable d'arguments
pour une fonction. PHP supporte les fonctions à nombre d'arguments variable. Ceci est
implémenté en utilisant le mot clé ... à partir de PHP 5.6. Les arguments seront passés dans
la variable fournie sous forme d'un tableau

<?php

echo sum(1, 2, 3, 4);

function sum(...$numbers) {

$acc = 0;

foreach ($numbers as $n) {

24
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
$acc += $n;

return $acc;

?>

Vous pouvez spécifier des arguments classiques avant le mot clé .... Dans ce cas, seuls les
arguments finaux qui ne correspondent pas à un argument classique seront ajoutés au tableau
généré par ....
<?php

fratrie("frère et soeur");

fratrie("frère", "Antoine");

fratrie("soeur", "Marie", "Claire", "Lucie");

function fratrie($type,...$noms) {

echo "J'ai " . count($noms) . " " . $type . ". ";

if (count($noms)>0) {

$sp = (count($noms)>1) ? "les noms" : "le nom";

$phrase = "Voici $sp : ";

foreach($noms as $key => $nom) {

$phrase .= $nom;

if ($key != count($noms)-1) $phrase .= ", ";

echo $phrase . ".";

echo "\n";

?>

Fonctions variables
Comme pour les variables, PHP supporte le concept de fonctions variables. Cela signifie que
si le nom d'une variable est suivi de parenthèses, PHP recherchera une fonction de même
nom, et essaiera de l'exécuter.

<?php

$ma_var = "foo";

$autre_var = "bar";

$ma_var();

25
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
$autre_var();

/******************************************/

/********* Défintions de fonction *********/

/******************************************/

function foo() {

echo "Appel de la fonction foo\n";

function bar() {

echo "Appel de la fonction bar\n";

?>

Les chaînes de caractères ¶


Une chaîne de caractères est une série de caractères, où un caractère est la même
chose qu'un octet. De ce fait, PHP ne supporte que les jeux de caractères
comportant 256 caractères différents, et, donc, n'a pas de support natif pour
l'Unicode. Reportez-vous aux détails sur le type chaîne de caractères pour plus
d'informations.

Note: Sur les systèmes 32-bit une chaîne de caractères peut être d'une taille allant
jusqu'au plus 2Go (2147483647 octets maximum).
Syntaxe ¶

Une chaîne de caractères littérale peut être spécifiée de 4 façons différentes :

o Guillemets simples
o Guillemets doubles
o Syntaxe Heredoc
o Syntaxe Nowdoc

Guillemets simples ¶

La façon la plus simple de spécifier une chaîne de caractères est de l'entourer de


guillemets simples (le caractère ').

Pour spécifier un guillemet simple littéral, il doit être échappé à l'aide d'un antislash
(\). Pour spécifier un antislash littéral, doublez-le (\\). Toute les autres instances
d'antislash seront traitées comme un antislash littéral : ce qui signifie que les autres
séquences auquelles vous êtes éventuellement habitués (comme \r ou \n)
s'afficheront telles quelles, sans avoir une quelconque signification particulière.

Note: Contrairement aux syntaxes avec double guillemets et heredoc, les variables et
les séquences d'échappement pour les caractères spéciaux ne
26
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

seront pas interprétées lorsqu'elles figurent dans une chaîne de caractères entourée
de guillemets simples.
<?php
echo 'ceci est une chaîne simple';

echo 'Vous pouvez également ajouter des nouvelles lignes


dans vos chaînes
de cette façon';

// Affiche : Arnold a dit : "I'll be back"


echo 'Arnold a dit : "I\'ll be back"';

// Affiche : Voulez-vous supprimer C:\*.*?


echo 'Voulez-vous supprimer C:\\*.*?';

// Affiche : Voulez-vous supprimer C:\*.*?


echo 'Voulez-vous supprimer C:\*.*?';

// Affiche : Ceci n'affichera pas \n de nouvelle ligne


echo 'Ceci n\'affichera pas \n de nouvelle ligne';

// Affiche : Les variables ne seront pas $traitees $ici


echo 'Les variables ne seront pas $traitees $ici';
?>

Guillemets doubles ¶

Si la chaîne de caractères est entourée de guillemets doubles ("), PHP interprétera


les séquences d'échappement suivantes pour les caractères spéciaux :

Caractères échappés

Séquence Signification

\n Fin de ligne (LF ou 0x0A (10) en ASCII)

\r Retour à la ligne (CR ou 0x0D (13) en ASCII)

\t Tabulation horizontale (HT or 0x09 (9) en ASCII)

\v Tabulation verticale (VT ou 0x0B (11) en ASCII)

\e échappement (ESC or 0x1B (27) en ASCII)

\f Saut de page (FF ou 0x0C (12) en ASCII)

\\ Antislash

\$ Signe dollar

\" Guillemet double

\[0- La séquence de caractères correspondant à cette expression rationnelle est un caractère, en notation oct
7]{1,3} silencieusement pour s'adapter à un octet (e.g. "\400" === "\000")

\x[0-9A- La séquence de caractères correspondant à cette expression rationnelle est un caractère, en notation hex
Fa-
f]{1,2}

27
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Caractères échappés

Séquence Signification

\u{[0-9A- La séquence de caractères correspondant à l'expression régulière est un point de code Unicode, qui sera
Fa-f]+} de caractères représentant le codepoint UTF-8

De la même façon que pour les chaîne de caractères entourées de guillemets


simples, l'échappement de tout autre caractère affichera l'antislash.

La fonctionnalité la plus intéressante des chaîne de caractères guillemets doubles


est que les noms de variables seront interprétés. Voir la documentation sur l'analyse
des chaînes de caractères pour plus de détails.

Syntaxe Heredoc ¶

Une troisième façon de délimiter une chaîne de caractères est la syntaxe Heredoc
: <<<. Après cet opérateur, un identifiant est fourni, suivi d'une nouvelle ligne.
La chaîne de caractères en elle-même vient ensuite, suivie du même identifiant pour
fermer la notation.

L'identifiant de fin peut être indenté par des espaces ou tabulations, au quel cas
l'indentation sera retirée de toutes les lignes dans la chaîne de caractères doc.
Antérieur à PHP 7.3.0, l'identifiant de fin doit commencer à la première colonne de la
ligne.

De plus, l'identifiant doit suivre les mêmes règles que n'importe quel autre libellé PHP
: il ne doit contenir que des caractères alphanumériques et des soulignés, et doit
commencer par un caractère non numérique ou un souligné ("underscore").

Exemple #1 Example Heredoc basique à partir de PHP 7.3.0

<?php
// no indentation
echo <<<END
a
b
c
\n
END;

// 4 spaces of indentation
echo <<<END
a
b
c
END;

Résultat de l'exemple ci-dessus en PHP 7.3 :

28
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

date
(PHP 4, PHP 5, PHP 7, PHP 8)

date — Formate un horodatage Unix

Description ¶
date(string $format, ?int $timestamp = null): string

Retourne une date sous forme d'une chaîne, au format donné par le
paramètre format, fournie par le paramètre timestamp (horodatage Unix) ou la date
et l'heure courantes si aucun timestamp n'est fourni. En d'autres termes, le
paramètre timestamp est optionnel et vaut par défaut la valeur de la fonction time().

Avertissement

Les horodatages Unix ne gèrent pas les fuseaux horaires. Utilisez la


classe DateTimeImmutable, et sa méthode de
formatage DateTimeInterface::format() pour formater les informations de date/heure
avec un fuseau horaire attaché.
Liste de paramètres ¶
format

Format accepté par DateTimeInterface::format().

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui


vaut par défaut l'heure courante locale si timestamp est omis ou null. En
d'autres termes, il vaut par défaut la valeur de la fonction time().

Valeurs de retour ¶

Retourne une date formatée. Si une valeur non numérique est utilisée dans le
paramètre timestamp, false sera retourné et une erreur de niveau E_WARNING est
émise.

Erreurs / Exceptions ¶

Chaque appel à une fonction date/heure générera un diagnostic de type E_WARNING si


le fuseau horaire n'est pas valide. Voir aussi date_default_timezone_set()

Historique ¶
Version Description

8.0.0 timestamp est désormais nullable.

Exemples ¶

Exemple #1 Exemple avec date()

<?php
// Définit le fuseau horaire par défaut à utiliser.
29
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
date_default_timezone_set('UTC');

// Affichage de quelque chose comme : Monday


echo date("l");

// Affichage de quelque chose comme : Monday 8th of August 2005 [Link] PM


echo date('l jS \of F Y h:i:s A');

// Affiche : July 1, 2000 is on a Saturday


echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

/* utilise les constantes dans le paramètre format */


// Affichage de quelque chose comme : Wed, 25 Sep 2013 [Link] -0700
echo date(DATE_RFC2822);

// Affichage de quelque chose comme : 2000-07-01T[Link]+00:00


echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>

Vous pouvez faire afficher un caractère spécial dans la chaîne de format en le


protégeant par un antislash. Si le caractère est lui-même une séquence incluant un
antislash, vous devrez protéger aussi l'antislash.

Exemple #2 Protection des caractères dans la fonction date()

<?php
// Affichage de quelque chose comme : Wednesday the 15th
echo date('l \t\h\e jS');
?>

Il est possible d'utiliser date() et mktime() ensemble pour générer des dates dans le
futur ou dans le passé.

Exemple #3 Exemple avec date() et mktime()

<?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
?>

Note:
Cette méthode est plus sûre que simplement ajouter ou retrancher le nombre de
secondes dans une journée ou un mois à un timestamp, à cause des heures d'hiver
et d'été.

Voici maintenant quelques exemples de formatage avec date(). Notez que vous
devriez échapper tous les autres caractères, car s'ils ont une signification spéciale,
ils risquent de produire des effets secondaires indésirables. Notez aussi que les
versions futures de PHP peuvent attribuer une signification à des lettres qui sont
actuellement inertes. Lorsque vous échappez les caractères, pensez à utiliser des
guillemets simples, pour que les séquences \n ne deviennent pas des nouvelles
lignes.

30
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Exemple #4 Exemple avec date()

<?php
// Aujourd'hui, le 10 Mars 2001, [Link] pm, Fuseau horaire
// Mountain Standard Time (MST)

$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 p


m
$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); // 20010310
$today = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-
01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // It is the 10th day (10
ème jour du mois).
$today = date("D M j G:i:s T Y"); // Sat Mar 10 [Link] MS
T 2001
$today = date('H:m:s \m \e\s\t\ \l\e\ \m\o\i\s'); // [Link] m est le mois
$today = date("H:i:s"); // [Link]
$today = date("Y-m-d H:i:s"); // 2001-03-
10 [Link] (le format DATETIME de MySQL)
?>

Pour formater des dates dans d'autres langues, IntlDateFormatter::format() peut être
utilisé à la place de date().

Les inclusions de fichiers

include ¶
(PHP 4, PHP 5, PHP 7, PHP 8)

L'expression de langage include inclut et exécute le fichier spécifié en argument.

Cette documentation s'applique aussi à l'instruction de langage require.

Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun n'est fourni,
l'include_path sera vérifié. Si le fichier n'est pas trouvé dans
l' include_path, include vérifiera dans le dossier du script appelant et dans le dossier
de travail courant avant d'échouer. L'instruction include émettra E_WARNING si elle ne
peut trouver le fichier; ce comportement est différent de require, qui émettra E_ERROR.

Notez que include et require vont lancer des erreurs de type E_WARNING, si le fichier
n'est pas accessible, avant de lancer une erreur de type E_WARNING ou E_ERROR,
respectivement.

Si un chemin est défini, absolu (commençant par une lettre de lecteur suivie
de \ pour Windows, ou / pour Unix/Linux) ou relatif (commençant par . ou ..),

31
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

l'include_path sera ignoré. Par exemple, si un nom de fichier commence par ../,
PHP cherchera dans le dossier parent pour y trouver le fichier spécifié.

Pour plus d'informations sur la façon dont PHP gère les fichiers inclus ainsi que le
chemin d'inclusion, reportez-vous à la documentation relative à l'include_path.

Lorsqu'un fichier est inclus, le code le composant hérite de la portée des variables de
la ligne où l'inclusion apparaît. Toutes les variables disponibles à cette ligne dans le
fichier appelant seront disponibles dans le fichier appelé, à partir de ce point.
Cependant, toutes les fonctions et classes définies dans le fichier inclus ont une
portée globale.

Exemple #1 Exemple avec include

[Link]
<?php

$couleur = 'verte';
$fruit = 'pomme';

?>

[Link]
<?php

echo "Une $fruit $couleur"; // Une

include '[Link]';

echo "Une $fruit $couleur"; // Une pomme verte

?>

Si l'inclusion intervient à l'intérieur d'une fonction, le code inclus sera alors considéré
comme faisant partie de la fonction. Cela modifie donc le contexte de variables
accessibles. Une exception à cette règle : les constantes magiques sont analysées
par l'analyseur avant que l'inclusion n'intervienne.

Exemple #2 Inclusion de fichiers dans une fonction

<?php

function foo()
{
global $couleur;

include '[Link]';

echo "Une $fruit $couleur";


}

/* [Link] est dans le contexte de foo() *


* donc $fruit n'est pas disponible hors de *
* cette fonction. $couleur l'est, car c'est *
* une variable globale */

foo(); // Une pomme verte


echo "Une $fruit $couleur"; // Une verte

32
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

?>

Il est important de noter que lorsqu'un fichier est include ou require, les erreurs
d'analyse apparaîtront en HTML tout au début du fichier, et l'analyse du fichier parent
ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier doit être
placé entre les balises habituelles de PHP.

Si les gestionnaires d'inclusion d'URL sont activés dans PHP, vous pouvez localiser
le fichier avec une URL (via HTTP ou bien avec un gestionnaire adapté : voir Liste
des protocoles et des gestionnaires supportés pour une liste des protocoles), au lieu
d'un simple chemin local. Si le serveur distant interprète le fichier comme du code
PHP, des variables peuvent être transmises au serveur distant via l'URL et la
méthode GET. Ce n'est pas, à strictement parler, la même chose que d'hériter du
contexte de variable. Le fichier inclus est en fait un script exécuté à distance, et son
résultat est inclus dans le code courant.

Exemple #3 Utiliser l'instruction include via HTTP

<?php

/* Cet exemple suppose que [Link] est configuré pour traiter


* les fichiers .php et non pas les fichiers .txt. De plus,
* 'Work' signifie ici que les variables
* $foo et $bar sont disponibles dans le fichier inclus
*/

// Ne fonctionne pas : [Link] n'a pas été traité par [Link] comm
e du PHP
include '[Link]

// Ne fonctionne pas : le script cherche un fichier nommé


// '[Link]?foo=1&bar=2' sur le système local
include '[Link]?foo=1&bar=2';

// Réussi
include '[Link]
?>

require ¶
(PHP 4, PHP 5, PHP 7, PHP 8)

require est identique à include mis à part le fait que lorsqu'une erreur survient, il
produit également une erreur fatale de niveau E_COMPILE_ERROR. En d'autres termes,
il stoppera le script alors que include n'émettra qu'une alerte de niveau E_WARNING, ce
qui permet au script de continuer.

33
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Les Formulaires

Les formulaires en PHP


Les formulaires permettent à l'utilisateur d'envoyer des données vers le
serveur.

Le formulaire est introduit par la balise HTML <form>.

Code de base d’un formulaire


<form method="post" action="[Link]">
<!-- On place ici les différents contrôles du formulaire -->
</form>

 L'atribut "method" : ici j'ai utilisé POST, on peut également


utiliser GET.

o GET est la méthode par défaut, il ne faut pas l'utiliser si le


formulaire contient d'informations sensibles car elles
34
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

apparaissent en clair dand l'URL. En outre la méthode GET ne


permet pas l'upload de fichiers.

o POST permet d'uploader des fichiers et offre une meilleur


sécurité car les informations n'apparaissent pas dans l'URL.

 L'atribut "action" : il contient le nom du script php qui sera appelé


lorsque le formulaire sera validé par l'utilisateur.

 Les différents contrôles

La liste ci-dessous n'est pas exhaustive.

Texte <input type="text" />

Nombre <input type="number" />


Bouton <input type="radio" name="etat" value="on" checked/>
radio
Case à <input type="checkbox" name="accept" id="accept" check
cocher ed="checked" />
Bouton <input type="submit" value="Submit" />
Liste
déroula <select name="section">...</select>
nte
<input name="slider" type="range" min="0" max="20" ste
Slider p="1" value="5" />

Zone <textarea name="memo" rows="5" cols="30">Contenu dans


de texte la zone de texte</textarea>

Pour chaque contrôle, l'atribut "name" servira de nom de variable dans


le script php qui traitera les informations. Il faut donc que ces noms soient
uniques.

EXEMPLE DE FORMULAIRE

35
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<!DOCTYPE html>
<html>
<head>
<title>Test méthode POST</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-
scale=1.0" />
</head>
<body> <!-- Corps de la page -->
<form action="[Link]" method="POST"> <!-- Début du
formulaire -->
<!-- Liste déroulante -->
<select name="titre">
<option>Mlle</option><option selected>Mme</option><option>M.</
option>
</select>
<!-- Zones de texte -->
<label for="nom"> Nom
: </label><input type="text" name="nom" id="nom" placeholder="
Entrez votre nom" /><br/><br/>
<label for="prenom">Prénom
: </label><input type="text" name="prenom" id="prenom" value="
Prénom par défaut" /><br/><br/>
<!-- Bouton radio -->
<label for="sexe">Sexe : </label>
<input type="radio" name="sexe" id="sexe" value="H" checked />
Masculin
<input type="radio" name="sexe" value="F" /> Féminin
<br/><br/>
<!-- Slider -->
<label for="age">Age : 1 </label>
<input type="range" name="age" id="age" min="1" max="99" step=
"1" value="18" /> 99
<br/><br/>
<!-- Case à cocher -->
<input type="checkbox" name="bDebutant" checked="checked" /> J
e débute en PHP<br/><br/>
<!-- Bouton -->
<input type="submit" name="btOK" value="OK">
</form> <!-- Fin du formulaire -->
</body>
</html>

Le code ci-dessus affiche le formulaire mais ne fait aucun traitement.

Traitement du formulaire
Comment accéder aux valeurs qui ont été saisies
dans le fomulaire ?

36
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Nous allons dans un premier temps simplement afficher les informations


reçues par le script php lorsque l'utilisateur valide le formulaire. Ces
informations sont contenues dans la variable php $_POST ($_GET si votre
formulaire utilise la méthode GET).

Créer un fichier php appelé [Link] et y copier le code ci-dessus.

Ajouter le code ci-dessous au tout début du fichier (avant <!DOCTYPE...>)

<?php
if($_POST) {
echo 'Contenu de la variable $_POST : >';
print_r($_POST);
}
?>

En exécutant notre script, on remarque que la variable $_POST est un


tableau associatif. L'attribut "name" de chaque contrôle du formulaire est
utilisé comme clé associée à la valeur saisie dans le formulaire.

On accède par exemple au nom qui a été tapé en écrivant : $_POST['nom']

Exemple d'exploitation des valeurs saisies dans


le formulaire
Modifier le code php du fichier précédent comme indiqué ci-dessous :

if($_POST) {
if($_POST['nom']!='') {
echo "<br/><br/>Bonjour " . $_POST['titre'] . "
" . $_POST['nom'] . "!<br/>";
echo "Je peux vous appeler " . $_POST['prenom']
. "<br/><br/>";

if(isset($_POST['bDebutant'])) {
echo "C'est une bonne idée de commencer à apprendre à
programmer en PHP !<br/><br/>";
}
else {
if($_POST['sexe']=='H') {
$mot = "débutant";
}
else {
$mot = "débutante";
}
echo "Comme vous n'êtes pas " . $mot . " vous pouvez passer
directement au mini-projet !<br/><br/>";
}
}
}
37
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

La fonction isset() permet de tester si une variable existe et est différente de


NULL.

LES SESSIONS

LES SEDSSIONS

Depuis PHP4, on entend beaucoup parler de sessions. De nombreuses personnes utilisant PHP
ignorent encore ce qu'elles sont et à quoi elles servent. D'autres, en revanche, ne savent pas les
utiliser à bon escient. Ce tutoriel est une approche à la fois théorique et pratique des sessions. Elles
seront présentées au moyen d'un exemple simple tout au long de ce cours. Il s'agit d'un espace de
site sécurisé par authentification.

Une session c'est quoi ?

Une session est un mécanisme technique permettant de sauvegarder temporairement sur le


serveur des informations relatives à un internaute. Ce système a notamment été inventé pour palier
au fait que le protocole HTTP agit en mode non connecté. A chaque ouverture de nouvelle session,
l'internaute se voit attribué un identifiant de session. Cet identifiant peut-être transmis soit en GET
(PHPSESSID ajouté à la fin de l'url), POST ou Cookie (cookie sur poste client) selon la configuration
du serveur. Les informations seront quant à elles transférées de page en page par le serveur et non
par le client. Ainsi, la sécurité et l'intégrité des données s'en voient améliorées ainsi que leur
disponibilité tout au long de la session. Une session peut contenir tout type de données : nombre,
chaîne de caractères et même un tableau.
Contrairement à une base de données ou un système de fichiers, la session conserve les informations
pendant quelques minutes. Cette durée dépend de la configuration du serveur mais est généralement
fixée à 24 minutes par défaut. Le serveur crée des fichiers stockés dans un repertoire particulier.

Les sessions sont particulièrement utilisées pour ce type d'applications :


 Les espaces membres et accès sécurisés avec authentification.
 Gestion d'un caddie sur un site de vente en ligne.
 Formulaires éclatés sur plusieurs pages.
 Stockage d'informations relatives à la navigation de l'utilisateur (thème préféré, langues...).
La théorie, c'est bien beau mais en pratique comment ça se passe ? La partie suivante explique
l'initialisation et la restauration d'une session ouverte.

Initialisation (et restauration) d'une session

PHP introduit nativement une unique fonction permettant de démarrer ou de continuer une session.
Il s'agit de session_start(). Cette fonction ne prend pas de paramètre et renvoit toujours true. Elle
vérifie l'état de la session courante. Si elle est inexistante, alors le serveur la crée sinon il la poursuit.

Initialisation et restauration d'une session

<?php
session_start();
?>
Dans le cas d'une utilisation des sessions avec les cookies, la fonction session_start() doit
obligatoirement être appellée avant tout envoi au navigateur sous peine de voir afficher les fameuses

38
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
erreurs :

"Cannot modify header information - headers already sent by ..." ou "Cannot send
session cookie - headers already sent by ...". Cela est du au fait que PHP ne peut plus
envoyer de cookie à l'utilisateur car il y'a déjà eu une sortie au navigateur (echo(), print(), espace
blanc, tag html...).
Note : il faut appeller session_start() sur chaque page utilisant le système de session.

Lecture et ecriture d'une session

Le tableau $_SESSION

Lorsqu'une session est créée, elle est par défaut vide. Elle n'a donc aucun intérêt. Il faut donc lui
attribuer des valeurs à sauvegarder temporairement. Pour cela, le langage PHP met en place le
tableau superglobal $_SESSION. Le terme superglobal signifie que le tabeau a une visibilité
maximale dans les scripts. C'est à dire que l'on peut y faire référence de manière globale comme
locale dans une fonction utilisateur sans avoir à le passer en paramètre. Le tableau $_SESSION peut-
être indexé numériquement mais aussi associativement. En règle générale, on préfère la seconde
afin de pouvoir donner des noms de variables de session clairs et porteurs de sens.

L'écriture de session

Pour enregistrer une nouvelle variable de session, c'est tout simple. Il suffit juste d'ajouter un couple
clé / valeur au tableau $_SESSION comme l'illustre l'exemple suivant.

Déclaration et initialisation d'une variable une session

<?php
// Démarrage ou restauration de la session
session_start();
// Ecriture d'une nouvelle valeur dans le tableau de session
$_SESSION['login'] = 'Dupond';
?>
Le tableau $_SESSION, qui était vide jusqu'à présent, s'est agrandit dynamiquement et contient
maintenant une valeur (Dupond) à la clé associative login. Une variable de session est alors créée.
Note de rappel : à place de la chaîne de caractères « Dupond », nous aurions pu
mettre un nombre, un booléen ou encore un tableau par exemple.

Lecture d'une variable de session

Après l'écriture, c'est au tour de la lecture. Il n'y a rien de plus simple. Pour lire la valeur d'une variable
de session, il faut tout simplement appeler le tableau de session avec la clé concernée. L'exemple ci-
dessous illustre tout ça.

Lecture d'une variable de session

<?php
// Démarrage ou restauration de la session
session_start();
// Lecture d'une valeur du tableau de session
echo $_SESSION['login'];
?>
Cette instruction aura pour effet d'afficher à l'écran la chaîne de caractères Dupond.

39
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Destruction d'une session

Comme cela a été évoqué plus haut, le serveur détruit lui même la session au bout d'un certain temps
si la session n'a pas été renouvellée. En revanche, il est possible de forcer sa destruction au moyen
de la fonction session_destroy(). Cela permet par exemple aux webmasters de proposer une page
de déconnexion aux membres loggués à leur espace personnel. Cependant, l'utilisation de
session_destroy() seule n'est pas très "propre". Le code suivant présente une manière plus correcte
de mettre fin à une session.

Destruction propre et complète d'une session

<?php
// Démarrage ou restauration de la session
session_start();
// Réinitialisation du tableau de session
// On le vide intégralement
$_SESSION = array();
// Destruction de la session
session_destroy();
// Destruction du tableau de session
unset($_SESSION);
?>
Pour être convaincu de la destruction de la session, il suffit juste d'essayer d'afficher le contenu du
tableau de session au moyen de la fonction print_r().

Configuration des sessions sur le serveur

Une session ne reste ouverte que pendant un certain temps. Tout au plus ce sera celle indiquée par
la directive session.gc_maxlifetime du [Link], entre deux clics consécutifs du client. Il est
recommandé de ne pas augmenter la valeur inscrite par défaut. Mais pourquoi ? Tout simplement
parceque si la session à une durée de vie plus importante, on s'expose à des risques de piratage
par vol de session notamment (cf: voir les liens annexes en fin de tutoriel pour plus d'informations).
Pour les mêmes raisons de sécurité, il est conseillé de configurer le serveur de la façon suivante :

Configuration de PHP recommandée pour les sessions

session.use_cookies 1
session.use_only_cookies 1
session.use_trans_sid 0
Cette configuration implique néanmoins une restriction totale pour les personnes n'acceptant pas les
cookies. Ci-dessous, la signification dans le même ordre des 3 lignes de configuration précédentes.
 L'identifiant de session est transmis par un cookie.
 Seul le cookie peut transmettre l'identifiant de session.
 Le PHPSESSID transmis dans l'url est strictement refusé.

Approche pratique : concevoir un accès restreint

Présentation du cas pratique

Le présent chapitre introduit un cas concret d'utilisation des sessions. Il s'agit d'un accès restreint
basique. Seul un utilisateur n'est autorisé à être loggué mais cet exemple est à la base de la création
d'un espace membre. C'est exactement la même chose. Pour réaliser tout ça, nous aurons besoin de
2 fichiers : le formulaire accompagné de son script de login, et la page protégée. Commençons par le
formulaire de login. Le code étant commenté, il n'y aura pas plus d'explications.

40
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE

Formulaire d'authentification : [Link]

Cas pratique : formulaire d'identification à un espace membre

<?php
// Definition des constantes et variables
define('LOGIN','toto');
define('PASSWORD','tata');
$errorMessage = '';

// Test de l'envoi du formulaire


if(!empty($_POST))
{
// Les identifiants sont transmis ?
if(!empty($_POST['login']) && !empty($_POST['password']))
{
// Sont-ils les mêmes que les constantes ?
if($_POST['login'] !== LOGIN)
{
$errorMessage = 'Mauvais login !';
}
elseif($_POST['password'] !== PASSWORD)
{
$errorMessage = 'Mauvais password !';
}
else
{
// On ouvre la session
session_start();
// On enregistre le login en session
$_SESSION['login'] = LOGIN;
// On redirige vers le fichier [Link]
header('Location: [Link]
exit();
}
}
else
{
$errorMessage = 'Veuillez inscrire vos identifiants svp !';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xmlns="[Link] xml:lang="fr">
<head>
<title>Formulaire d'authentification</title>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>"
method="post">
<fieldset>
<legend>Identifiez-vous</legend>
<?php
// Rencontre-t-on une erreur ?
if(!empty($errorMessage))
{
echo '<p>', htmlspecialchars($errorMessage) ,'</p>';
}
?>
<p>
<label for="login">Login :</label>
<input type="text" name="login" id="login" value="" />
</p>
<p>

41
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<label for="password">Password :</label>
<input type="password" name="password" id="password" value="" />
<input type="submit" name="submit" value="Se logguer" />
</p>
</fieldset>
</form>
</body>
</html>

Exemple de page protégée : [Link]

Exemple de page sécurisée avec les sessions

<?php
// On prolonge la session
session_start();
// On teste si la variable de session existe et contient une valeur
if(empty($_SESSION['login']))
{
// Si inexistante ou nulle, on redirige vers le formulaire de login
header('Location: [Link]
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xmlns="[Link] xml:lang="fr">
<head>
<title>Administration</title>
</head>
<body>
<?php
// Ici on est bien loggué, on affiche un message
echo 'Bienvenue ', $_SESSION['login'];
?>
</body>
</html>

Petite explication : pour protéger chacune des pages de l'administration, il faut absolument ajouter
en tête de fichier le premier script entièrement. Celui-ci redirige instantanément l'utilisateur s'il n'est
pas convenablement loggué. Sinon il affiche la page Web.

42

Vous aimerez peut-être aussi