Vous êtes sur la page 1sur 124

Programmation Web :

PHP

17:40:47 Programmation Web 1


INTRODUCTION

17:40:47 Programmation Web 2


PHP: Langage de script pour le Web

 Qu’est-ce que PHP ?


 Langage de script. Principalement utilisé côté serveur
 Créé en 1994-1995
 Acronyme : PHP: Hypertext Preprocessor
 Extension utilisée sur ≈80% des serveurs Web
 Langage multi plate-forme (UNIX / Windows…)
 Open Source
 Versions actuelles :
 PHP7.4

17:40:47 Programmation Web 3


Langage de script ?

 Langage interprété
 Pas de compilation
 Typage faible
 Programmation orientée objet

17:40:47 Programmation Web 4


Utilité et utilisation de PHP

 Création de pages Web « dynamiques »,

 Interface entre un serveur Web et des bases de


données

17:40:47 Programmation Web 5


Principales fonctionnalités de PHP

 Manipulation de chaînes et tableaux


 Calendrier / dates / heures
 Fonctions mathématiques
 Accès au système de fichiers
 Manipulation d’images
 HTTP / FTP / IMAP
 Bases de données (Oracle, MySQL, …)
 Génération PDF
 …

17:40:47 Programmation Web 6


FONCTIONNEMENT

17:40:47 Programmation Web 7


Fonctionnement de PHP
Rendu
Fermeture
Requête
Exécution
Localisation
Connexion
graphique
Envoi dudeHTTP
du
lasur
de
du
connexion
code
des
le
résultatdu
la
code
serveur
ressource
client
données
PHP
au PHP ((port
client hello.php
dans80)
le fichier
)
= réponse HTTP Client
Navigateur
GET /hello.php HTTP/1.0
Réseau •HTML
•JavaScript
Protocole HTTP •CSS

Exécution d’un programme sur le serveur


Construction de la réponse
<html>
<head>
Serveur
<title>Hello</title> <?php
</head> echo " <html> hello.php
Serveur Web
<body>Hello world</body>.html <head>
</html> .php
<title>Hello</title>
.jpg
</head>
Module PHP <body>Hello world</body>
</html> ";
MySQL

17:40:47 Programmation Web 8


Fonctionnement de PHP

Client Serveur

Demande de ressource
Traitement de la demande
La ressource est « .php »
Réseau Transfert de la demande
au module PHP

Exécution du script
PHP sur le serveur
Construction de la
réponse
Réponse produite
Analyse de la réponse

Rendu graphique de la
réponse
17:40:48 Programmation Web 9
Programme en PHP

Délimitation du code PHP dans le fichier .php :


 <?php Code PHP ?> Fermeture optionnelle
et déconseillée
 <script language="PHP">
Code PHP Confusion avec JavaScript
 à bannir !!
</script>
 <? Code PHP ?> Dépend de
short_open_tag la configuration
du serveur
 <% Code PHP %> asp_tags
 à bannir !!

17:40:48 Programmation Web 10


Eléments de syntaxe PHP

 La syntaxe de PHP est celle de la famille « C »


(C, C++, Java, …)

 Chaque instruction se termine par « ; »

 Commentaires:
/* jusqu’au prochain */
// jusqu’à la fin de la ligne

17:40:48 Programmation Web 11


VARIABLES ET TYPES

17:40:48 Programmation Web 12


Les variables et les types de données

 Tout identificateur commence par « $ »


 Les affectations sont réalisées grâce à « = »
 Les types sont :
 Numérique entier : 12 ou réel : 1.54
 Chaîne: "Hello" ou ’Bonjour’
 Booléen: true, false (PHP 4)
 Tableau: $tab[2]=12
 Objet (PHP4, PHP5)
 Ressource
 NULL
 Les variables ne sont pas explicitement déclarées

17:40:48 Programmation Web 13


Les variables et les types de données

 La « déclaration » d’une variable correspond à


sa première affectation
 Le type d’une variable est dynamique et est
déterminé par la valeur qui lui est affectée
 Une variable possède donc :
 Un nom (commençant par $)
 Un type dynamique
 Une valeur
 Adaptation possible du type selon le contexte
sans modification du type intrinsèque

17:40:48 Programmation Web 14


Typage à l’affectation. Exemple

// Pas de déclaration préalable de variable

$test = 1.5 ;
$test
$test = 12 ; integer
float
array
1.5
12

$test = array() ;

$test = "10" ;

17:40:48 Programmation Web 15


Typage en fonction du contexte. Exemple

$nombre1 = 1.5 ;
$nombre2 = 12 ;
$chaine1 = "10" ;
$chaine2 = 'coucou' ;
Utilisé comme float
$total =
$nombre1 + $nombre2 + $chaine1 + $chaine2 ;
1.5 12 "10" 'coucou'

13.5 10.0

23.5 0.0

echo $total ; // 23.5 Réel 23.5

17:40:48 Programmation Web 16


Modification de types

 Le type désiré peut être précisé : cast


 $variable = (nom_du_type) valeur

$a = (integer) "10" ;

$b = (string) 12 ;

$c = (float) $b ;

17:40:48 Programmation Web 17


Définition de constantes

<?php
define("MA_CONSTANTE", "Bonjour à tous") ;

nom valeur

Définition d'une constante

echo ma_constante ;

Utilisation de la constante

17:40:48 Programmation Web 18


Variables dynamiques

 Les variables dynamiques (aussi dites variables


variables) reposent sur le fait que le nom d’une
variable peut lui-même être une variable.
 $ville1 = "rabat";
 $ville2 = "casa";
 $ville3 = "Settat";
 for($i=1;$i<4;$i++)
 echo ${"ville".$i}."<br>";

2017 Programmation web : PHP 19


CHAÎNES DE CARACTÈRES

17:40:48 Programmation Web 20


Substitution de variables dans les chaînes

 Guillemets doubles
$a="chaîne" ; chaîne
$b="voici une " . $a; voici une chaîne

 Guillemets simples
$a='chaîne' ; chaîne
$b='voici une ' . $a; voici une chaîne

17:40:48 Programmation Web 21


La commande echo

 Naïvement, permet d’envoyer du texte au


navigateur du client (« écrire » la page au format
HTML résultant de l’interprétation de PHP)
 echo "Bonjour" ;
 $nom= "Moussaoui" ; echo "Bonjour $nom" ;

 Plus exactement, permet d’envoyer des octets au


navigateur du client
 Contenu HTML, XML, CSS, JavaScript, …
 Données d'une image
 Contenu d'un ficher PDF, Flash, etc.
17:40:48 Programmation Web 22
Hello world !
Interprétation du code PHP sur le serveur et
transmission du résultat au client
Serveur Navigateur
<?php <html>
$debut =" <html> <head>
<head>   <title>hello</title>
  <title>hello</title> </head>
<body>
</head>
Hello world!
<body> ";  </body>
$corps = "Hello world! "; </html>
$fin  = " </body>
</html> ";
/* Envoi au client */
echo  $debut.$corps.$fin ;

Impossible de voir le code PHP depuis le navigateur !!


17:40:48 Programmation Web 23
OPÉRATEURS

17:40:48 Programmation Web 24


Concaténation de chaînes

 Permet d’assembler plusieurs chaînes


 Réalisé grâce à l’opérateur point : « . »
"Bonjour " . "Mohamed" 
 vaut "Bonjour Mohamed" 

$nb = 6*2 ;
"Acheter " . $nb . " livres" 
 vaut "Acheter 12 livres"

17:40:48 Programmation Web 25


Les opérateurs arithmétiques

$a + $b Somme

$a - $b Différence

$a * $b Multiplication

$a / $b Division

$a % $b Modulo (Reste de la division entière)

17:40:48 Programmation Web 26


Les opérateurs d’in- et de
dé-crémentation pré- et post-fixés

Retourne la valeur de $a puis augmente la


$a++ valeur de $a de 1
Augmente la valeur de $a de 1 puis
++$a retourne la nouvelle valeur de $a
Retourne la valeur de $a puis diminue la
$a-- valeur de $a de 1
Diminue la valeur de $a de 1 puis retourne
--$a la nouvelle valeur de $a

17:40:48 Programmation Web 27


Les opérateurs de comparaison

$a== $b Vrai si égalité entre les valeurs de $a et $b

$a != $b Vrai si différence entre les valeurs de $a et $b

$a < $b Vrai si $a inférieur à $b

$a > $b Vrai si $a supérieur à $b

$a <= $b Vrai si $a inférieur ou égal à $b

$a >= $b Vrai si $a supérieur ou égal à $b

$a === $b Vrai si $a et $b identiques (valeur et type)

$a !== $b Vrai si $a et $b différents (valeur ou type)

17:40:48 Programmation Web 28


Comparaison large / stricte
$a = 12 ; $b = "12" ; $c = 13.0 ;

var_dump($a ==  $b) ; boolean true


var_dump($a ==  $c) ; boolean false
var_dump($c ==  $b) ; boolean false
var_dump($a !=  $b) ; boolean false
var_dump($a !=  $c) ; boolean true
var_dump($c !=  $b) ; boolean true
var_dump($a === $b) ; boolean false
var_dump($a === $c) ; boolean false
var_dump($c === $b) ; boolean false
var_dump($a !== $b) ;
boolean true
var_dump($a !== $c) ;
boolean true
var_dump($c !== $b) ;
boolean true
Les opérateurs logiques

[Expr1]and [Expr2] Vrai si [Expr1] et [Expr2] sont vraies

[Expr1] && [Expr2] idem

[Expr1] or [Expr2] Vrai si [Expr1] ou [Expr2] sont vraies

[Expr1] || [Expr2] idem


Vrai si [Expr1] ou [Expr2] sont vraies
[Expr1] xor [Expr2] mais pas les deux

! [Expr1] Vrai si [Expr1] est non vraie

17:40:48 Programmation Web 30


STRUCTURES DE CONTRÔLE

17:40:48 Programmation Web 31


Structure de contrôle Si…Alors…Sinon…

if (condition)
{
/* Bloc d’instructions exécuté si la
condition est vraie */
} Optionne
else l
{
/* Bloc d’instructions exécuté si la
condition est fausse */
}

17:40:48 Programmation Web 32


Structure de contrôle Tant que… faire…

while (condition)
{
/* Bloc d’instructions répété tant que la
condition est vraie */
}

do {
/* Bloc d’instructions exécuté une fois
puis répété tant que la condition est
vraie */
} while (condition) ;

17:40:48 Programmation Web 33


Structure de contrôle Tant que… faire…
for (avant; condition; fin_chaque_itération)
{ /* Bloc d’instructions répété tant que la
condition est vraie */
}

Équivalent à :

avant ;
while (condition)
{ /* Bloc d’instructions répété tant que la
condition est vraie */
fin_chaque_itération ;
}

17:40:48 Programmation Web 34


Structure de contrôle selon…
switch (val)
{
case v1:
instructions exécutées si val==v1
case v2:
case v3:
instructions exécutées si val==v2
ou si val==v3
ou si val==v1

default:
instructions dans tous les cas
}
 Fonctionne exactement comme une série de if/else
avec comparaison large
 val, v1, v2, … peut être de type integer, float,
string, NULL
17:40:48 Programmation Web 35
L’instruction break
Permet de sortir d’une structure de contrôle

switch ($aff) {
case 5 :
echo "aff vaut 5";
break;
case 20:
echo "aff vaut 20";
break;
default :
echo "a ne vaut ni 5 ni 20";
}
Cas rendus exclusifs si break présent pour chaque case
17:40:48 Programmation Web 36
TABLEAUX

17:40:48 Programmation Web 37


Principes généraux

 Un tableau PHP est en réalité une carte


ordonnée
 Une carte associe des valeurs à des clés
 Un tableau PHP peut être vu comme :
 Une série de valeurs (peu importe leur type)
 Chaque valeur est étiquetée, repérée par une clé
(entier ou chaîne)
 Ils sont dits associatifs
Clé 0 1 2 3
Valeur 12 15.2 "42" NULL

Clé "début" 12 "a" "valeur"


Valeur false 3 16 "bonjour"
17:40:48 Programmation Web 38
Tableaux « classiques » : indexés

 Création / initialisation:
$tab1=array(12, "fraise", 2.5) ;

$tab2[] = 12 ;
$tab2[] = "fraise" ;
$tab2[] = 2.5 ;

$tab3[0] = 12 ;
$tab3[1] = "fraise" ;
$tab3[2] = 2.5 ;
17:40:48 Programmation Web 39
Tableaux associatifs : syntaxe

$tab5["annee"
annee ] = 2017 ;
2017
$tab5["langage"
langage ] =  "PHP" ;
PHP
$tab5["version"
version ] = 5 ;
$tab5["editeur"
editeur ] = "sublime" ;
sublime

$tab6 
tab6 = array(
"annee“
annee   => => 2017,
2017
"langage" 
langage => 
=> "PHP",
PHP
"version" 
version => 
=> 5,
"editeur" 
editeur => 
=> "sublime“
sublime
) ;

17:40:48 Programmation Web 40


Structure de contrôle « Pour chaque… »

Des tableaux associatifs ne peuvent être


parcourus grâce aux indices des cases
contenant les éléments…
foreach ($tableau as $element)
{
/* Bloc d’instructions répété pour
chaque élément de $tableau */
/* Chaque élément de $tableau est
accessible grâce à $element */
}
17:40:49 Programmation Web 41
Structure de contrôle « Pour chaque… »

foreach($tableau as $cle => $element)


{
/* Bloc d’instructions répété pour
chaque élément de $tableau */
/* Chaque élément de $tableau est
accessible grâce à $element */
/* La clé d’accès à chaque élément est
donnée par $cle */
}

17:40:49 Programmation Web 42


Tableaux multidimensionnels

 Pour créer un tableau grâce au mot-clé array(), il faut donner


la clé et l’élément, séparés par =>.
$tab = array( "prenom" => " mohamed" , "ville" => " rabat" , "travail" =>
"informatique ") ;
 Comme pour les tableaux indexés, il est possible de
référencer directement un élément grâce à sa clé.
 Exercice : créer un tableau associatif $ligne pour enregistrer
les infos suivantes :
cin passwd prenom ville
a 111 med rabat
b 222 ali casa
c 333 kamal fes

2017 Programmation web : PHP 43


DONNÉES DE FORMULAIRES

17:40:49 Programmation Web 44


Traitement des données de formulaires

 PHP permet de traiter les données saisies grâce


à un formulaire HTML si le champ ACTION du
formulaire désigne une page PHP du serveur.

 Après récupération par le serveur Web, les


données sont contenues dans l'une des variables
superglobales de type tableau associatif $_GET
ou $_POST (ou $_REQUEST).
$_REQUEST

 La valeur peut être trouvée grâce à une clé qui


porte le même nom que le champs du formulaire
de la page HTML de saisie.
17:40:49 Programmation Web 45
Les entités de stockage
Test d’existence
La fonction isset() permet de tester si une variable existe. isset( $var )

La fonction empty() permet de tester son contenu.

La fonction unset() permet de détruire une variable dans votre programme.
Traitement des données de formulaires
Client
Réseau Navigateur
•HTML
nomPers=robert
•JavaScript
•CSS

<html>
<head>
Serveur
<title>bonjour</title> nomPers
</head>
Serveur
<bodyWeb
> <?php
Bonjour robert ! $html = <<<HTML
</body> <html>
</ html> PHP <head><title>bonjour</title></head>
Module <body>
HTML;
robert
$html .= "Bonjour ".$_GET['nomPers']." !\n" ;
echo $html . "</body>\n</html>" ;

17:40:49 Programmation Web 47


Exemple – Formulaire HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>formulaire</title>
</head>
<body>
<form action="valide1.php" method="get">
Nom: <input type="text" name="nomPers">
<input type="submit" value="Envoyer">
</form>
</body>
</html>

17:40:49 Programmation Web 48


Exemple – Traitement en PHP
<?php
$html = <<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>bonjour</title>
$_GET['nomPers']
</head> est-il défini ?
<body> HTML;
if (isset($_GET['nomPers'])) $_GET['nomPers']
{
if (!empty($_GET['nomPers'])) est-il vide ?
{
$html .= "Vous avez saisi '"
.$_GET['nomPers']."'\n" ;
}
else
$html .= "Aucune valeur saisie\n";
}
else
$html .= "Utilisation incorrecte\n" ;
echo $html . "</body>\n</html>" ;
17:40:49 Programmation Web 49
Exercice

 Développer un formulaire d’inscription form.php


(nom, dateNaissance,motPasse).
 Les informations sont transmises par la méthode «
POST» à la page inscription.php
 Afficher les messages d’alerte à chaque fois qu’une
des 3 informations est absente.
 Modèle : l’information sur …….manque dans le projet
……
 Le lien retour permet de retourner à la page form.php
en affichant dans les zones de saisis les informations
précédentes
2017 Programmation web : PHP 50
Formulaires contenant des champs
« SELECT »

17:40:49 Programmation Web 51


Formulaires contenant des champs
« SELECT unique»
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="valide3.php" method="get">
Choisissez des fruits:&nbsp;
<select name="sel">
<option>Fraise
<option>Pomme
<option>Poire
Envoyer
<option>Banane
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
</body> valide3.php?sel=Pomme
</html>

17:40:49 Programmation Web 52


Formulaires contenant des champs
« SELECT multiple»
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="valide3.php" method="get">
Choisissez des fruits:&nbsp;
<select name="sel" multiple>
<option>Fraise
<option>Pomme
<option>Poire
Envoyer
<option>Banane
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
</body> valide3.php?sel=Pomme&sel=Poire ???
</html>

17:40:49 Programmation Web 53


Formulaires contenant des champs
« SELECT multiple»
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="valide3.php" method="get">
Choisissez des fruits:&nbsp;
<select name="sel[]" multiple>
<option>Fraise
<option>Pomme
<option>Poire
Envoyer
<option>Banane
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
valide3.php?sel%5B%5D=Pomme&sel%5B%5D=Poire
</body>
</html> valide3.php?sel[]=Pomme&sel[]=Poire

17:40:49 Programmation Web 54


Traitement des données des champs
« SELECT »
<?php
$html = <<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Liste de fruits</title>
</head> $_GET[‘sel']
<body> est un tableau
HTML;
if (isset($_GET['sel']) && !empty($_GET['sel']))
{/* La variable $_GET['sel'] est définie
et elle n'est pas vide */
foreach($_GET['sel'] as $fruit)
$html .= "<p>Vous avez choisi $fruit\n" ;
}
else
$html .= "<p>Vous n'avez pas choisi de fruit\n" ;
echo $html . "</body>\n</html>" ;

17:40:49 Programmation Web 55


Résultat

17:40:49 Programmation Web 56


Formulaires contenant des champs
« CHECKBOX »

17:40:49 Programmation Web 57


Formulaires contenant des champs
« CHECKBOX »
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form name="formu" action="valide3.php" method="get">
Choisissez des fruits&nbsp;:<br>
<p><input type="checkbox" name="sel[]" value="Fraise">Fraise
<p><input type="checkbox" name="sel[]" value="Pomme" >Pomme
<p><input type="checkbox" name="sel[]" value="Poire" >Poire
<p><input type="checkbox" name="sel[]" value="Banane">Banane
<p><input type="checkbox" name="sel[]" value="Cerise">Cerise
<p><input type="submit" value="Envoyer">
</form>
</body>
</html>

17:40:49 Programmation Web 58


Résultat

17:40:49 Programmation Web 59


Chargement de fichiers

<form method=post enctype="multipart/form-data">


if(isset($_FILES['cv'])){
$dossier = 'upload/';
$fichier = basename($_FILES['cv']['name']);
if(move_uploaded_file($_FILES['cv']['tmp_name'], $dossier .
$fichier))
echo $fichier.'Upload effectué avec succès !';
else //Sinon (la fonction renvoie FALSE).
echo 'Echec de l\'upload !';
}
//enregistrement des fichiers à l’instant de chargement
$name_file = time(). "-" .$fichier;
2017 Programmation web : PHP 60
PHP PDO

17:40:49 Programmation Web 61


PDO

 PDO : PHP Data Objects


 Extension PHP fournissant une interface pour
accéder à une base de données
 Fournit une interface d'abstraction pour l'accès
aux données
 Ne fournit PAS une abstraction de base de
données
 SQL spécifique au moteur

 Fonctionnalités présentes / absentes

 Interface orientée objet


17:40:49 Programmation Web 62
Connexions et gestionnaire de connexion

 Instanciation d'un objet PDO


 $dbh=new PDO(DSN [, user [, pass [, options]]]);
 DSN : Data Source Name
 nom_du_driver:syntaxe_spécifique_au_driver
 Ex : mysql:host=localhost;dbname=ma_base
 user : nom d'utilisateur, pass : mot de passe
 options : tableau associatif
 spécifiques au driver
 Ex : array(PDO::ATTR_PERSISTENT => true)) ;
 Fin de connexion : $dbh=null ; ou unset($dbh) ;
17:40:49 Programmation Web 63
Gestion des erreurs de connexion

<?php
try {
$dbh = new PDO('mysql:host=h;dbname=db',
$user, $pass) ;

$dbh = null ;
}
catch (PDOException $e) {
echo "<p>Erreur: ".$e->getMessage() ;
die() ;
}
?>

17:40:49 Programmation Web 64


Exécution d'une requête SELECT

 PDOStatement PDO::query ( string statement )

Résultat de requête Requête

<?php
$requete = "SELECT * FROM clients";
$resultat = $pdo->query($requete);

17:40:49 Programmation Web 65


Parcours du résultat SELECT
 Parcourir le résultat de la requête
SELECT * Résultat de requête
FROM morceau
ORDER BY mor_id
Curseur interne

+--------+------------------------------------+
| mor_id | mor_nom |
+--------+------------------------------------+
| 872 | With A Little Help From My Friends |
| 873 | The Letter |
| 874 | Marjorine |
| 875 | Midnight Rider |
| 876 | You Are So Beautiful |
| 877 | Feelin' Allright |
| 878 | Cry Me A River |
...

17:40:49 Programmation Web 66


Exploitation des résultats SELECT
<?php
$requete = "SELECT * FROM clients";
$resultat = $pdo->query($requete);
$data = $resultat->fetchAll(PDO::FETCH_ASSOC);

$data = $resultat->fetchAll(PDO::FETCH_NUM);

$data = $resultat->fetchAll(PDO::FETCH_BOTH);

$data = $resultat->fetchAll(PDO::FETCH_OBJ);

17:40:49 Programmation Web 67


Exécution des requétes LMD
<?php
$requete = " INSERT INTO clients(id, prenom )
VALUES (1, ‘med’) ";
If( $pdo->exec($requete))
Echo ‘client ajouté avec succès’;

17:40:49 Programmation Web 68


Exercice de synthèse

 Créer une application qui :


 Propose une liste déroulante des facultés.
 A chaque sélection d’une faculté on affiche un
marqueur associé sur google MAP.

2017 Programmation web : PHP 69


COOKIE & SESSION

2017 Programmation web : PHP 70


Cookies, principe des échanges

Client Web Serveur Web


(Navigateur) (Apache)
Réseau

Id=1212; GET / HTTP/1.1


path=/;

HTTP/1.1 200 OK
Set-Cookie: Id=1212; path=/;

GET /liste HTTP/1.1


Cookie: Id=1212

HTTP/1.1 200 OK

17:40:49 Programmation Web 71


Cookies

 Avantages :
 Rappelle au serveur des informations sur le client
 L'échange de la données dans le sens
serveur  client est limité au dépôt du cookie
 Ne nécessite pas de modifier les pages HTML
 Compatible avec les formulaires
 Le cookie a une durée de validité
 Inconvénients :
 Les données circulent en permanence dans le sens
client  serveur
 Les données circulent en clair sur le réseau
 La quantité de données doit être limitée
17:40:49 Programmation Web 72
Cookie
Démarrer session Client 1
id : B
A

Cookie
Réseau id : A
Serveur

Set-Cookie:
Cookie:
GET …
OK: / … …

A B
Client 2

Données de
Cookie
session pour A
B
id : B

17:40:49 Programmation Web 73


Cookies
 Petits fichiers laissés sur le poste du client
 Transmis dans le flux HTTP

 Transmis au client par la commande SetCookie

SetCookie("variable1","valeur1");
SetCookie("variable2","valeur2");
 Vérifier la présence d'un cookie :
 tableau associatif superglobal $_COOKIE
 ex : cookie ‘prenom'  $_COOKIE[‘prenom']

Exercices : créer une cookie qui transmet le nom,


prenom et
2017 Programmation web : PHP 74
Sessions

 Stockage sur le serveur de données associées à


un client particulier
 Nécessite une identification unique pertinente et
persistante des clients
 Identifiant de session (MD5 128bits / SHA-1 160bits)
 Persiste par paramètre d'URL ou cookie
 Évite l'échange permanent de données (en
dehors de l'identifiant)
 Nécessite la linéarisation des variables pour leur
stockage (fichier, BD, personnalisé)
 Simule un mode connecté
17:40:49 Programmation Web 75
Sessions

 Créer ou restaurer une session


 bool session_start ( void )
 Manipuler les données de session
 Tableau associatif superglobal $_SESSION
 Lire ou définir l'identifiant de session
 string session_id ( [string id] )
 Détruire toutes les variables d'une session
 void session_unset ( void )
 Détruire une session
 bool session_destroy ( void )

17:40:49 Programmation Web 76


FONCTIONS

17:40:49 Programmation Web 77


Fonctions utilisateur
 Description d’une fonctionnalité dépendant
éventuellement de paramètres et retournant
éventuellement un résultat
 Définition
function moyenne($a,$b)
{
return ($a+$b)/2. ;
}
 Utilisation
$resultat = moyenne(2,4) ;
echo $resultat ; // vaut 3
17:40:49 Programmation Web 78
Fonctions utilisateur
 Valeur de retour
function moyenne($a,$b)
{ … }
Typage faible de PHP :
Aucune information
 Arguments
function moyenne( $a, $b)
{ … }
 Variables définies dans une fonction
Typage faible de PHP :
 Visibles et accessibles dans la fonction
Aucune information

17:40:49 Programmation Web 79


Mode de passage des arguments (types natifs)
<?php
function permutation($x, $y) {
echo "permutation..." ;
$t = $x ;
$x = $y ;
Permutation impossible :
$y = $t ;
Passage des arguments
} des fonctions par valeur
$a = 12 ;
$b = 210 ;
echo "\$a = $a" ; $a = 12
echo "\$b = $b" ; $b = 210
permutation($a, $b) ; permutation...
echo "\$a = $a" ; $a = 12
echo "\$b = $b" ; $b = 210

17:40:49 Programmation Web 80


Arguments par défaut des fonctions
 Valeur par défaut d’un argument s’il n’a pas été
défini lors de l’appel de la fonction
function bonjour($prenom="inconnu")
{ echo "Bonjour cher ".$nom ; }

 Utilisation
bonjour() ;
Bonjour cher inconnu

bonjour("Mohamed") ;
Bonjour cher Mohamed
17:40:49 Programmation Web 81
Définition de fonctions fréquemment utilisées

 Certaines fonctions sont utilisées dans plusieurs


scripts PHP
 Comment faire pour ne pas les définir dans
chacune des pages ?
 Utilisation de :
 include("fichier") ;
 require("fichier") ;
 include_once("fichier") ;
 require_once("fichier") ;
 Permet d’inclure le contenu de fichier dans
le script courant

17:40:50 Programmation Web 82


include et require
Fichier mafonction.php Fichier utilisation1.php
<? …
function mafonction($arg) require("mafonction.php")
{ …

}
Fichier utilisation2.php

Problème avec include : include("mafonction.php")
produit un warning …
le script continue

Problème avec require :


produit un fatal error
le script s’arrête

17:40:50 Programmation Web 83


Fonctions chaines de caractère

 Longueur d'une chaîne : Fonction strlen


int strlen(string chaine) 
string trim ( string chaine [, string character] )

Calculer le nombre de caractère dans la


chaine : « il fait beau aujourd’hui… »
Calculer le nombre de caractère sans les

espaces.
Calculer le nombre de caractère sans compter

ni les espaces ni les points.

17:40:50 Programmation Web 84


Fonctions chaines de caractère

 Récupération d'une sous-chaine : Fonction


substr
 string substr(string chaine, int début, int nb_caracter) 

 Extraire le jour, mois et année de la date


suivante : ’06/05/2017’

 Resultat :
 Jour : 06
 Mois : 05
 Année : 2017

17:40:50 Programmation Web 85


Fonctions chaines de caractère

 Recherche d'une sous-chaine en PHP :


Fonction strpos et strstr
 string strstr( string chaine1, string chaine2)
 Int strpos(string chaine, string caractere)
 Extraire le nom utilisateur et le nom de
domaine de l’adresse mail suivante :
 med@gmail.com

 Resultat :
 Nom utilisateur : med
 Nom de domaine : gmail.com

17:40:50 Programmation Web 86


Fonctions chaines de caractère

 Remplacer un motif dans une chaîne :


str_replace
string str_replace(string chaine1, string chaine2, string chaine3)

 Remplacer le text prenom par le texte


mohamed dans la chaine suivante :
 « bonjour prenom, votre demande
d’inscription est enregistrée »
 Resultat :
 « bonjour mohamed, votre demande d’inscription est
enregistrée »

17:40:50 Programmation Web 87


Fonctions chaines de caractère

 Changement de casse :
strtoupper ,strtolower, ucfirst et lcfirst
string strtoupper(string chaine)
string strtolower (string chaine)
string ucfirst(string chaine
string lcfirst(string chaine)

Tester ces fonctions sur l’affichage de la


chaine : « formation php »

17:40:50 Programmation Web 88


Exercices synthèses
 Créer votre propre fonction nommée :
nb_caracteres() qui compte le nombre de
caractère dans une chaine. Cette fonction ne
compte pas les espaces dans la chaine.

 Créer une fonction CIN() qui permet d’afficher


le numéro de la carte nationale sous ce
format :
AB-123456
 Resultat :
 CIN(‘AB 123456’) = AB-123456
 CIN(‘AB123456’) = AB-123456

17:40:50 Programmation Web 89


Lire et écrire dans un fichier

 L'accès au système de fichiers en PHP est réalisé par le


moteur PHP. Plus précisément, c'est le serveur Web qui
accède aux fichiers. Ce sont donc les droits d'accès de
l'utilisateur "web" qui sont mis en jeu avec toutes les
limitations que cela comporte !
 Les fonctions présentées retournent souvent false en
cas d'échec et affichent parfois des avertissements dans
ce cas

17:40:50 Programmation Web 2012-2013 90


Fonctions de lecture/écriture

 file : contenu  tableau


 fopen : ouvrir un fichier
 fread : lire dans un fichier ouvert
 fwrite : écrire dans un fichier ouvert
 fseek : se déplacer dans un fichier
 ftell : position dans un fichier
 fgetc : lire un caractère
 fgets : lire une ligne
 fclose : fermeture d'un fichier

17:40:50 91
Fonctions de lecture/écriture
Fichier Lecture
Curseur r

Écriture avec
Fichier
remplacement
Curseur r+

Écriture avec
Fichier
destruction
Curseur w

Écriture avec
Fichier
ajout seul
Curseur a

17:40:50 92
Fonctions de lecture/écriture

resource fopen ( string filename, string mode )


crée une ressource nommée, spécifiée par le paramètre
filename, sous la forme d'un flux ouvert selon le mode

Mode Description
'r' Lecture, curseur au début
'r+' Lecture/écriture, curseur au début
'w' Écriture, curseur au début, RAZ
'w+' Lecture/écriture, curseur au début, RAZ
'a' Écriture, curseur à la fin, fseek HS
'a+' Lecture/écriture, curseur à la fin, fseek HS
'x' Création, écriture, échec si existe
'x+' Création, lecture/écriture, échec si existe
ex : $fp = fopen("index.html", 'r+') ;
17:40:50 93
Exercice de synthèse

Développer un script qui permet de charger un fichier


distant dans une base de données
url :
http://www.bkam.ma/Marches/Principaux-indicateurs/Mar
che-des-changes/Cours-de-change/Cours-des-billets-de-
banque-etrangers

17:40:50 94
Fonctions tableau

array range(int min, int max)


Crée un tableau contenant les entiers dans l'intervalle [inf, sup].
Exemple : créer un tableau d’element de 5 à 15;

int array_walk(array tab, string fonction)


Exécute une fonction sur chacun des membres d'un tableau.
Exemple : aficher les données du tabeau suivant :
$data = array(
array("prenom" => "med", "age" => 18),
array("prenom" => "ali", "age" => 20),
array("prenom" => "ahmed", "age" => 16)
);

17:40:50 95
Fonctions tableau

bool in_array(mixed valeur, array tab)


Retourne vrai si valeur est dans tab.
Exemple : verifier que le prénom « ali » existe dans le tableau $data :
if(in_array('ali',$data))
echo " trouvé";

int array_push(array tab, mixed var)


ajoute un élément à la fin du tableau. 
Exemple : ajouter ahmed : 23 à la fin du tableau $data :

mixed array_pop(array tab)
Retire un élément de la fin du tableau.
Exemple : retirer le dernier élément du tableau $data :
17:40:50 96
Fonctions tableau

array array_merge(array tab1, array tab2)


Rassemble deux ou plusieurs tableaux en un seul.
Exemple : que donne le résultat de fusion suivant ?
$total = array_merge($data[0],$data[1]);

int array_push(array tab, mixed var)


ajoute un élément à la fin du tableau. 
Exemple : ajouter ahmed : 23 à la fin du tableau $data :

mixed array_pop(array tab)
Retire un élément de la fin du tableau.
Exemple : retirer le dernier élément du tableau $data :

17:40:50 97
Fonctions tableau

void sort(array tab)
Trie le tableau.
Exemple : $temp = array("casa" => 30, "settat" => 29 , "rabat" => 28);

void asort(array tab)
Trie un tableau en ordre, en conservant les index.

int ksort(array tab)
Trie un tableau suivant les clés.

17:40:50 98
Exercice de synthèse
$salles = array( "1" => "renaissance" ,
"2" => "visioconference" ,
"3" => "amphi A" );

$jours = array( "1" => "lundi" ,


"2" => "mardi" ,
"3" => "mercredi" ,
"4" => "jeudi" );

$reservation = array( array("1", "1" , "MIAGE"),


array("2", "4" , "MIAGE"),
array("3", "3" , "MIAGE"),
array("2", "1" , "LICDA"),
array("3", "2" , "LICDA") );
Développer une fonction pour afficher les données sous cette forme

99
ENVOYER ET RECEVOIR DES
EMAILS

17:40:50 Programmation Web 100


PROTOCOL POP3 et IMAP

1 – Installation d’un serveur de messagerie : mailEnable

2 – Configuration du nom de domaine fst.ma

3 – Lancement de mailEnableAdmin et crétion d’un compte


mail : prenom@fst.ma

4 – Configuration d’un client de messagerie « outlook »


pour le test d’envoi et reception mail.

17:40:50 101
Fonction ouverture flux IMAP

resource imap_open ( string $mailbox , string $username ,


string $password)
Ouvre un flux IMAP vers la boîte aux lettres mailbox.

 INBOX représente la boîte aux lettres de l'utilisateur courant.


L'adresse du serveur, mise entre accolades '{' et '}', est constituée
du nom du serveur, du protocole (commençant par '/') et d'un port
optionnel (spécifié avec ':'). Exemple : $server = "
{localhost:110/pop3}INBOX ";

 Retourne un flux IMAP en cas de succès, ou FALSE si


une erreur survient.
imap_close() - Termine le flux IMAP
17:40:50 102
Fonction Vérification boitte aux lettres

object imap_check ( resource $imap_stream )

Vérifie les informations de la boîte aux lettres courante.


Retourne les informations dans un objet contenant les propriétés
suivantes :
 Date - Date de dernière modification du contenu
 Driver - protocole utilisé pour accéder à la boîte
 Mailbox - nom de la boîte aux lettres
 Nmsgs - nombre de messages de la boîte aux lettres
 Recent - nombre de messages récents de la boîte aux lettres

 Retourne FALSE si une erreur survient.

17:40:50 103
Fonction Récupération des messages

array imap_fetch_overview (resource $imap_stream,
string $sequence)
Lit les en-têtes des courriers électroniques de la
séquence sequence et retourne un sommaire de leur
contenu.
 Retourne un tableau d'objets décrivant l'en-tête de chaque
message. Les propriétés possibles sont :
 subject : le sujet du message
 from : l'expéditeur
 to : le destinataire
 date : la date d'expédition
 size : la taille en octets
 uid : UID du message dans la boîte aux lettres
 msgno : le numéro de séquence du message dans la boîte
 ….

17:40:50 104
Fonction Télécharger le corps d'un message

bool imap_body ( resource $imap_stream , int


$msg_number

imap_body() va retourner une copie brute du corps du


message. Pour extraire les sous-parties MIME du
message, utilisez imap_fetchstructure() pour analyser la
structure.

17:40:50 105
Fonction mails envoyées

 bool imap_mail ( string $to , string $subject , string $mes
sage )
imap_mail() permet d'envoyer des mails avec une
gestion correcte des destinataires Cc et Bcc.

 array imap_list ( resource $imap_stream , string $ref , str
ing $pattern )
Lit la liste des boîtes aux lettres.

Exercice : réaliser un lecteur WEBMail

17:40:50 106
Exercice de Synthèse

Développer un système d’ intérogation d’une base de


données en utilisant l’envoi et réception par mail

1. Le client envoi un mail ou il pose une question.


2. Un script php vérifie la réception du dernier mail à
intérval régulier.
3. Si le mail contient un mot clé on exécute une requete sur
la base de données
4. On renvoi la réponse de la base de données par mail au
client.

17:40:50 107
FPDF ET EXCEL

17:40:50 Programmation Web 108


FPDF

 Générer un fichier PDF


 Générer un fichier Excel

17:40:50 109
FORMAT JSON
& API PHP

17:40:50 Programmation Web 110


Format JSON

 Format d’échange entre différentes technologies.


 Trnasforme les objets/tableaux/… en texte JSON en
utilisant des symboles : [], :, {}, …
 C’est une très bonne technique à utiliser pour le
développement AJAX
 PHP supporte JSON depuis 5.2.

17:40:50 111
Format JSON
 JSON se base sur deux structures :

Une collection de couples nom/valeur. { "cle": "valeur" }


Les tableaux de valeurs ordonnées. [ "valeur1" , "valeur2" ]

17:40:50 112
Fonction json_decode

 json_decode ( string $json [, bool $assoc = false)])
 Récupère une chaîne encodée JSON et la convertit en une
variable PHP.

 Exemple :
 Afficher la valeur de ville
 $data_entite = '{ "ville": "settat" }';

 Afficher la liste des villes


 $data_tableau = '[ "fes", "settat" ]';

17:40:50 113
Fonction json_decode
Décoder le contenue de $data ci-dessous

17:40:50 114
Fonction json_decode

string file_get_contents ( string $filename );
Lit tout un fichier dans une chaîne

Décoder le contenue de l’url ci-dessous


$url = 'http://freegeoip.net/json/41.249.88.73';

 Exemple :
Développer une page qui affiche la ville du visiteur en utilisant son

adrèsse ip;

17:40:50 115
Fonction json_decode

Développer un site web à l’aide des données externalisées


$url = ‘http://api.football-data.org/documentation';

 Exemple :
Afficher les compétitions

Afficher les équipes

Afficher les joueurs

17:40:50 116
Fonction json_encode

String json_encode ( mixed $value)
Retourne la représentation JSON d'une valeur

Exemple
Convertir en format json le tableau suivant
$data = array(
"prenom" => "med",
"age" => 23
);

17:40:50 117
API échange base de données

On souhaite interroger une base de données à l’aide d’une


API.

Lister le contenue d’une table :


http://localhost/api.php/nom_de_la_table

Lister le contenue d’une table sous forme de liste d’objets


http://localhost/api.php/nom_de_la_table?transform=1

17:40:50 118
API échange base de données
Les lignes dont le champ est égale à valeur :
http://localhost/api.php/table?filter=champ,eq,valeur

Les lignes dont id est inferieur ou egale égale à 1 :

http://localhost/api.php/table?filter=id,le,1

Les lignes dont id n’est pas superieur à 1 :


http://localhost/api.php/table?filter=id,ngt,2

Les lignes dont id est compris entre 1 et 3


http://localhost/api.php/table?filter=id,bt,1,3

Plus de details : https://github.com/mevdschee/php-crud-api

17:40:50 119
API Ajout base de données
 CURL : est une bibliothèque qui permet de communiquer avec des sites distants.Par
exemple d'envoyer une requête POST, ...
 $data = array(‘liste des champs, valeurs à inserer’);

Créer la représentation JSON du tableau de données


$data_string = json_encode($data);

Initialiser une nouvelle session cURL.


$ch = curl_init('http://localhost/formation_PHP/API/api.php/table');
Cette fonction retourne un identifiant de session cURL

on précise les données à insérer en format json


 curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);

Exécuter la requête
 $result = curl_exec($ch);

17:40:50 120
API modif base de données
 $data = array(‘liste des nouvelles données’);
Créer la représentation JSON du tableau de données
$data_string = json_encode($data);

Initialiser une nouvelle session cURL.


Il faut ajouter à la fin l’id de la ligne à modifier
$ch = curl_init('http://localhost/formation_PHP/API/api.php/table/cle_primaire');
Cette fonction retourne un identifiant de session cURL

Cette option précise qu’il s’agit d’un update et non pas un insert
curl_setopt($ressource, CURLOPT_CUSTOMREQUEST, 'PUT');

on précise les données à insérer en format json


 curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);

Exécuter la requete
 $result = curl_exec($ch);

17:40:50 121
API envoi SMS
$data = array(
"num" => "0611111111",
"message" =>" test ok"
);

API d’envoi des SMS


$ressource = curl_init('http://isf.ma/sms/envoi_sms.php');

Appel en mode POST


curl_setopt($ressource, CURLOPT_CUSTOMREQUEST, 'POST');

Passation des tableau de parametres


curl_setopt($ressource, CURLOPT_POSTFIELDS, $data);

Exécuter la requete

 $result = curl_exec($ch);
17:40:50 122
API envoi SMS
Exercice de synthèse :
Développer un système d’envoi de SMS automatique.
Texte du message : Joyeux anniversaire ……..
Date d’envoi : jour de l’anniverssaire
Heur d’envoi : 00H 01

La table anniverssaires contient :


Id_anniverssaire
Prenom,
Date_naissance

17:40:50 123
AJAX

17:40:50 Programmation Web 124

Vous aimerez peut-être aussi