Vous êtes sur la page 1sur 97

Développement Web/Application Web

FIA2 GL /FIA2 II

Chiraz El Hog Amri


2014-2015
Initiation à PHP- Plan
 Introduction
 Syntaxe de base
 Variables et Constantes
 Opérateurs
 Structures de contrôle
 Tableaux
 Fonctions
 Fichiers

2 Chiraz El Hog Amri Developpement/Application Web


Introduction à PHP
 Créé par Rasmus Lerdorf en 1994 pour des besoins personnels
(Personnal Home Page). Première version publique en 1995 sous le
nom de Personnal Home Page Tools
 PHP (Hypertext Preprocessor) est un langage interprété (langage de
script) exécuté côté serveur
 Les scripts PHP sont lus et interprétés
par le moteur PHP.
 PHP comporte plusieurs fonctions. Il est fournit avec des librairies
offrant des fonctionnalités diverses (accès aux bases de données,
images…)
 Généralement utilisé pour créer des site web dynamique
 Le code PHP s'écrit en général dans un fichier dont l'extension est
.php

3 Chiraz El Hog Amri Developpement/Application Web


Principe de Fonctionnement

Script php
Requête:
http://serveur/page.php
résultat html Requête SQL

Réponse: html

Client Serveur HTTP (Apache)

Serveur de base de
données (MySQL)

4 Chiraz El Hog Amri Développement/Application Web


Principe de Fonctionnement

Page HTML calculée

Client
http://localhost/exemple1.php

Page PHP originelle

5 Chiraz El Hog Amri Développement/Application Web


Syntaxe de base
 Bases de la syntaxe héritées du C et du Perl
 Il y a quatre moyens pour passer du mode HTML au
mode PHP :
 <? … ?>
 <?php … ?>
 <script language="php"> … </script>
 <% … %> <%= $variable; %>
 Chaque possibilité est valable selon le fichier de
configuration et l'option de compilation utilisée.
 Séparateur d’instructions « ; »

6 Chiraz El Hog Amri


Developpement/Application Web
Syntaxe de base
 Le tag de fin (?>) implique la fin d'une instruction, et donc
ajoute implicitement un point virgule.

 Commentaires :
 ...code /* ...mes commentaires... */ code...,
 ...code... // ...mes commentaires...,
 ...code... # ...mes commentaires....

7 Chiraz El Hog Amri Développement/Application Web


Les types de données
 PHP permet la manipulation d’un certain nombre de types de
données différents dans lesquels on distingue :
 Les types scalaires de base :
 Entier (integer)
 Les nombres réels (double ou float)
 Les chaines de caractère (string)
 Les booléens (le type boolean qui contient les valeurs TRUE ou
FALSE)
 Les types composés :
 Tableaux (le type array)
 Objets (le type object)
 Les types spéciaux :
 Type resource
 Type null

8 Chiraz El Hog Amri Developpement/Application Web


Les variables

 Une variable est auto-déclarée lors de sa première affectation.


 Son nom commence par $.
 Les espaces sont interdits
 Le tiret - , les caractères de ponctuation sont interdits
 Il ne peut y avoir de chiffre après le $
 Éviter les caractères accentués
 Sensible à la casse

 Exemple :
 Scalaires: $a = 2;
 Chaines ('' ou "") : $chaine = "hello";
 Tableaux: $tab = array(1=>'hello'); $tab[2] = 3;
 Objets $obj = new User();

9 Chiraz El Hog Amri Developpement/Application Web


Les variables
 Pas de typage explicite, le type d’une variable est déterminé
par la valeur qu’on lui affecte
 Fonctions utiles pour les variables
 boolean isset($var) // tester si la variable existe ou non
 boolean empty($var) // tester si la variable est vide ou non
 boolean is_integer($var) ou is_int($var)
 boolean is_double($var)
 boolean is_string($var)
 boolean is_bool($var)
 boolean is_array($var)
 boolean is_object($var)
 boolean is_null($var)
 string gettype($arg)
 settype($var,$type)
 unset($prenom);
10 Chiraz El Hog Amri
Developpement/Application Web
Les variables
 Variables statiques :
 Variable locale qui ne perd pas sa valeur à chaque fois que le bloc est
exécuté ;
 Une variable déclarée statique est initialisée seulement lors de la première
utilisation
 Déclaré par l’attribut static : static $toto ;
 Très utile pour la création de fonctions récursives ;

11 Chiraz El Hog Amri Developpement/Application Web


Les variables
 Variables dynamiques :
 Prend la valeur d’une variable et l’utilise comme nom d’une autre variable ;

 Variables extérieures :
 Toutes les variables transmises par les méthodes POST ou GET sont
accessibles via les tableaux associatifs $HTTP_POST_VARS et
$HTTP_GET_VARS
 Les variables d’environnement sont accessibles comme des variables
PHP classiques (ex : $HOME) ou par les fonctions getenv() et putenv()

12 Chiraz El Hog Amri Developpement/Application Web


Les variables
 La plupart des variables ont une portée qui s’étend sur
l’intégralité du script PHP, elles sont globales ;
 Les variables sont locales au sein d’une fonction ;
 Deux façons existent pour accéder à une variable globale
au sein d’un bloc :
 déclarer la variable comme global au sein du bloc,
 utiliser le tableau associatif $GLOBALS avec comme clé le nom
de la variable globale.
 Affectation par valeur : $b=$a
 Affectation par (référence) variable : $c = &$a

13 Chiraz El Hog Amri


Developpement/Application Web
Exemple

14
Chiraz El Hog Amri Developpement/Application Web
Les constantes
 PHP définit certaines constantes et propose un mécanisme
pour en définir d’autres durant l’exécution du script ;
 On définit une constante en utilisant la fonction define() ;
 Ex : define("MA_CONSTANTE", "Bonjour") ;
echo MA_CONSTANTE ; # affiche Bonjour
define (“ANNEE”, 2015) ;
 Les constantes prédéfinies
 NULL, PHP_VERSION , PHP_OS , TRUE et FALSE , E_ERROR, _FILE_
 _LINE_ , _DIR_

15 Chiraz El Hog Amri Developpement/Application Web


Les opérateurs
 Les opérateurs arithmétiques :
 addition : $a + $b,
 soustraction : $a - $b,
 multiplication : $a * $b,
 division : $a / $b,
 modulo (reste de la division entière) : $a % $b.
 Les opérateurs sur les bits :
 ET bit à bit : $a & $b,
 OU bit à bit : $a | $b,
 OU-Exclusif/XOR bit à bit : $a ˆ $b,
 NON bit à bit : ˜$a,
 décalage à droite de $b bits : $a > > $b,
 décalage à gauche de $b bits : $a < < $b.
16 Chiraz El Hog Amri Developpement/Application Web
Les opérateurs
 Les opérateurs d’affectation :
 l’opérateur d’affectation le plus simple est le signe =,
 la valeur retournée par une expression d’assignement est la
valeur assignée,
Ex : $a = ($b = 4) + 3 ; # $a vaut 7 et $b vaut 4
 l’opérateur ++ est équivalent à += 1,
 l’opérateur -- est équivalent à -= 1,
 Ex : $toto = 0 ;
echo ++$toto ; # affiche 1
echo $toto++ ; # affiche 1
echo $toto ; # affiche 2

17 Chiraz El Hog Amri Developpement/Application Web


Instructions conditionnelles
 if(c1) {inst si c1 } elseif (c2) {inst si c2} ...else {inst}

18 Chiraz El Hog Amri Developpement/Application Web


Instructions conditionnelles
 switch(val){
case v1 :inst v1 ;
...
case vn :inst vn ;
default : inst par defaut}

 (cond) ? valSiVrai : valSiFaux

19 Chiraz El Hog Amri Developpement/Application Web


Boucles
 while(cond){instr}
 do{inst}while(cond)
 for (expr1 ; expr2 ; expr3){inst}

20 Chiraz El Hog Amri Developpement/Application Web


Les fonctions
 Sans typage, comme les variables
 Passage de paramètres :
 par défaut, par valeur
 passage par référence possible avec &.
 Syntaxe de déclaration
function <nom_de_la_fonction>($param1, $param2,…){
//corps de la fonction }

21 Chiraz El Hog Amri Developpement/Application Web


Les fonctions
 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) ;
 Une variable locale déclarée à l’intérieur d’une fonction
n’est vue qu’à l’intérieure de celle-ci
 Une variable locale déclarée à l’extérieure de la fonction
n’est pas vue à l’intérieure de la fonction

$b non reconnue
$i n’existe pas
$a non reconnue
22 Chiraz El Hog Amri Developpement/Application Web
Les fonctions
 Des informations peuvent être passées à une fonction en
utilisant un tableau d’arguments séparés par une virgule
 Un argument peut être une variable ou une constante ;
 PHP supporte :
 le passage d’arguments par valeur (méthode par défaut),
 le passage d’arguments par référence, et
 les valeurs par défaut des arguments.

23 Chiraz El Hog Amri Developpement/Application Web


Les fonctions

24 Chiraz El Hog Amri Developpement/Application Web


Fonctions de chaînes de caractères
 Affichage de chaînes de caractère: echo et print
 Concaténation avec le point « . »

 Longueur d’une chaîne : strlen

 Enlever les blancs du début et de la fin de la chaine: trim

25 Chiraz El Hog Amri


Developpement/Application Web
Fonctions de chaînes de caractères
 Caractère d’échappement « \ »
 Tout caractère précédé par « \ » est affiché tel qu’il est

26 Chiraz El Hog Amri


Developpement/Application Web
Fonctions de chaînes de caractères
 strpos($chaine, $motif[, $debut]) : retourne la position de la
première occurrence d’un motif dans une chaine à partir de la
position $debut .
 La position de début est optionnelle
 Si la sous chaine n’est pas trouvé elle retourne false
 Stripos: même syntaxe et rôle mais ne tient pas compte des
majuscule et minuscule
 Strrpos: fait la recherche de droite à gauche
 Strrripos: recherche de droite à gauche sans tenir compte des
majuscules et minuscule
 Strstr ($chaine, $motif[, $avant=false]): permet de trouver la
première occurrence d'un motif. Sa seule différence avec strpos() est
qu'elle retourne le reste de la chaîne à partir de la position détectée
 strnatcmp($str1,$str2) : comparaison de 2 chaînes
27 Chiraz El Hog Amri
Developpement/Application Web
Fonctions de chaines de caractères
 substr($chaine,$debut[,$longueur]) : retourne la sous
chaine qui commence a partir de la position $debut ayant la
longueur $longueur
 str_replace($chaine1, $chaine2,$texte[,$nbfois]):
cherche dans $texte toutes les occurrences de $chaine1 et les
remplace par $chaine2
 strtoupper($chaine): conversion en majuscules
 strtolower($chaine): conversion en minuscules
 ucfirst($chaine): met le premier caractère en majuscule et
retourne la chaine
 ucwords($chaine): met en majuscule la première lettre de tous
les mots et retourne la chaine

28 Chiraz El Hog Amri


Developpement/Application Web
Fonctions de chaine de caractères
 Ecrivez le code PHP qui permet de transformer une
chaine de caractère de plusieurs mots, en une chaine
ayant le 1er caractère en Majuscule et tout le reste en
minuscules. La chaine initiale contient des mots en
majuscule et en minuscule

29 Chiraz El Hog Amri


Developpement/Application Web
Inclusion de bibliothèques ou de fichiers
 Faire appel à un fichier (bibliothèque) à n’importe quel
emplacement d’un script php
 Ecrire une fonction dans un fichier puis l’appeler dans un autre
fichier
 Définir des constantes dans un fichier puis l’utiliser dans un
autre
 Mettre dans un fichier une suite d’instruction qui sont utilisées
dans plusieurs fichiers (instruction de connexion à la base de
données)
 L’extension des fichiers à inclure est généralement
.inc.php mais ce n’est pas obligatoire

30 Chiraz El Hog Amri


Developpement/Application Web
Inclusion de bibliothèques ou de fichiers
 L’appel des fichiers à inclure se fait à travers les fonctions
include() et require()
 L’appel d’un fichier revient à inclure le contenu du fichier
dans le fichier appelant
 PHP recopiera le contenu du fichier inclus dans
l’emplacement où il a été appelé
 Si erreur
 include() génère une erreur de niveau warning et continue
l’exécution de la page
 require() génère une erreur fatale et arrête le script

31 Chiraz El Hog Amri


Developpement/Application Web
Inclusion de bibliothèques ou de fichiers
 Include_once() et require_once() permettent de s’assurer
que le fichier a été inclut une seule fois dans un fichier
 Si Test1.inc.php contient la ligne include (test2.inc.php);
 Si le fichier accueil.php contient les 2 lignes suivantes
 Include_once(test1.inc.php);
 Include_once(test2.inc.php); //n’est pas inclut car son contenu
existe déjà dans test1.inc.php

32 Chiraz El Hog Amri


Developpement/Application Web
Les tableaux
 Création à l’aide de la fonction array()
<?php
$tab=array();
?>

 Les éléments d’un même tableau peuvent être de type


différent (tableau hétérogène).
 PHP permet d’utiliser deux types de tableau : les tableaux
indicés (ordinaires comme ceux du langage C) et les tableaux
associatifs.
 Il n’est pas nécessaire de déclarer un tableau avant son
utilisation
 Il existe deux types de tableaux:
 Tableaux indicés
 Tableaux associatifs

33 Chiraz El Hog Amri


Developpement/Application Web
Les tableaux
 Tableaux indicés
 les indices du tableau commencent à zéro
< ?php
$tab[0] = “sousse”;
$tab[1] = ”mahdia”;
$tab[2] = ”bizerte”;
echo “Je vis à $tab[1]. <BR>’’ ; ?>

 La variable $tab est un tableau par le simple fait que son nom
est suivi de crochets et d’un indice. < ?php // sans indices
 On peut ne pas spécifier les indices $tab[] = “sousse”;
 $couleur = array("bleu", "rouge " );$tab[] = ”mahdia”;
$tab[] = ”bizerte”;
echo “Je vis à $tab[0]. <BR>’’ ; ?>

34 Chiraz El Hog Amri


Developpement/Application Web
Les tableaux
 Tableaux associatifs :
 fait correspondre des valeurs à des clés. L’accès à un élément
du tableau se fait par une clé.
 La syntaxe est similaire, mais on remplace l’indice numérique
par un terme (de type string).
$tab[‘nom’] = "Ben Youssef " ;
$tab[‘prenom’] = "sofiane" ;
$tab[‘adr’] = "Tabarka" ;
$tab[‘age’] = 17 ;

 Il est possible de déclarer un tableau associatif et l’initialiser de


la manière suivante: $tableau = array(clé => valeur, ….)
$produit = array("reference" => "P0A1", "designation"=> "Ecran", "prix" => 340);

35 Chiraz El Hog Amri


Developpement/Application Web
Les tableaux
 Taille d’un tableau: count($tableau)

36 Chiraz El Hog Amri


Developpement/Application Web
Les tableaux
 Affichage
 Boucle for classique

 Boucle foreach

37 Chiraz El Hog Amri


Developpement/Application Web
Les tableaux
 Tableau à deux dimensions
 c'est un tableau dont chaque élément est lui-même un
tableau. $tableau=array(array());

38 Chiraz El Hog Amri


Developpement/Application Web
Les Tableaux
 Fonctions pour les tableaux
count($tab) Retourne un entier : nombre d'éléments du
tableau
sizeof($tab) Retourne un entier : nombre d'éléments du
tableau
explode($separateur, $chaine) Transforme une chaine en tableau en fonction
du séparateur. Retourne un tableau

implode($str,$tab) Opération inverse : Transforme un tableau en


chaine . Retourne une chaine

max($tab) retourne la plus grande valeur d'un tableau

min($tab) retourne la plus petite valeur du tableau

shuffle($tab) change aléatoirement l'ordre des éléments

39 Chiraz El Hog Amri


Developpement/Application Web
Les tableaux
 Positionnement dans le tableau
current($tab) valeur de l'élément courant (endroit où est le
pointeur), NB pos(tab) est un alias de current.

each($tab) clé et valeur pour l'endroit où est le pointeur


sur le tableau (fait avancer de 1 le pointeur)

end($tab) place le pointeur sur le dernier élément du


tableau
key($tab) Index/clé de l'élément courant
next($tab) avance le pointeur d'une case, retourne sa
valeur
prev($tab) recule d'une case et retourne sa valeur
reset($tab) Positionne le pointeur sur le premier élément
du tableau

40 Chiraz El Hog Amri


Developpement/Application Web
Les tableaux
 Tri des éléments du tableau

arsort($tab) Trie par ordre décroissant, l'index associé


se déplace avec les valeurs

asort($tab) Trie par ordre croissant, l'index associé se


déplace avec les valeurs

booleen ksort($tab) Trie le tableau par ses clés


booleen ksort($tab) Trie le tableau en ordre inverse par ses clés
rsort($tab) Trie par ordre décroissant, efface les
valeurs des clés
sort($tab) Trie par ordre croissant, efface la valeur des
clés

41 Chiraz El Hog Amri


Developpement/Application Web
Date et heure
 Fonction date() permet de retourner la date sous forme
de chaine de caractère
 date($format[,$timestamp])
 format « d-m-y »
 timestamp: nombre de secondes écoulées depuis 1970
 pour construire un timestamp on utilise la fonction mktime
mktime($heure,$minute,$seconde,$mois,$jour,$annee)

42 Chiraz El Hog Amri


Developpement/Application Web
Date et heure
 Format format description Exemple
a "am" ou "pm" minuscules pm
A "AM" ou "PM" majuscules PM
D jour du mois 01 /20
D jour de la semaine en 3 lettres mon
F nom du mois Janvier
h heure (format 12 heures avec 0 en entete ) 12
H heure (format 24 heures avec 0 en entete ) 08
g heure (format 12 heures sans 0 en entete) 4
G heure (format 24 heures sans 0 en entete) 10
i minutes 44
j jours du mois ( pas de 0 en entete) 3
m mois de l'année ( 0 en entete ) 04
M mois de l'année en 3 lettres jui
n mois de l'année; pas de 0 en entete 4
s secondes 30
y année à 2 chiffres 02
Y année en 4 chiffres 2002

43 Chiraz El Hog Amri


Developpement/Application Web
Exercices

 Afficher la date du 14 Janvier 2011 sous format


jour/mois/année
 Créer en php le menu suivant

44 Chiraz El Hog Amri


Developpement/Application Web
Formulaires
 Rappel html
 Balise <form name=… action=… method=…> </form>
 Attributs:
 Name: nom du formulaire
 Action: page destination
 Method: méthode d’envoi du formulaire POST/GET
 Get:
 Contenu des variables transférées au niveau de l’URL
 Information limitée à 256 caractères
 Post:
 Données transférées au niveau de la requête (masquées)
 Pas de limites au niveau de l’information envoyée

45 Chiraz El Hog Amri


Developpement/Application Web
Variables prédéfinies/ superglobales
 Plusieurs variables prédéfinies en PHP sont
"superglobales", ce qui signifie qu'elles sont disponibles
quel que soit le contexte du script.
 $_SERVER :Variables fournies par le serveur web
 $_GET ; $_POST ; Variables pour la transmission de
paramètres
 $_COOKIE : pour la gestion des cookies.
 $_FILES :Variables pour la transmission de fichiers
 $_ENV : Les variables fournies par l’environnement.
 $_SESSION :Variable de la sessions
 Toutes les infos : phpinfo();

46 Chiraz El Hog Amri


Developpement/Application Web
Formulaires
 Upload d’un fichier
 type MIME "multipart/form-data"
 côté serveur, utilisation de la variable prédéfinie $_FILE
 le fichier est automatiquement décodé et stocké par PHP
 Contenu du fichier envoyé dans une requête POST

47 Chiraz El Hog Amri


Developpement/Application Web
Formulaires
 Côté serveur : Reception de la reqête HTTP :
 Décodage du corps MIME de la requête
 Création du fichier dans un répertoire temporaire
 Récupération par la variable super globale, $_FILES
 <pre><? print_r($_FILES); ?></pre>
 Clé : nom du champs du formulaire
 Valeur : un tableau associatif
 name : nom du fichier chez le client
 type : type MIME si positionné par le navigateur
 size : taille du fichier uploadé en octets
 tmp_name : chemin complet du fichier uploadé
 error : code d’erreur

48 Chiraz El Hog Amri


Developpement/Application Web
Formulaires

49 Chiraz El Hog Amri


Developpement/Application Web
Formulaires
 boolean is_uploaded_file ( string $filename )
 is_uploaded_file ($_FILES["userfile"]["tmp_name"])
 boolean move_uploaded_file ( string $filename , string $d
estination )
 move_uploaded_file($_FILES["userfile"]["tmp_name"],
$uploaddir . $_FILES["userfile"]["name"])

50 Chiraz El Hog Amri


Developpement/Application Web
Formulaires
 Champs texte ou mot de passe
 $_GET[‘name’]/ $_POST[‘name’]/$_REQUEST[‘name’]
 Zone de texte
 $_GET[‘name’]/ $_POST[‘name’]/$_REQUEST[‘name’]
 nl2br(): ajoute des retours à la ligne
 Cases à cocher/ Bouton radio/ liste choix unique
 Case non cochée -> non envoyée (isset(<caseName>)=false)
 Case cochée: $_GET[‘caseName’]/
$_POST[‘caseName’]/$_REQUEST[‘caseName’]

51 Chiraz El Hog Amri


Developpement/Application Web
Formulaires

52 Chiraz El Hog Amri


Developpement/Application Web
Formulaires
 Liste choix multiples

 On récupère directement un tableau de valeurs.

53 Chiraz El Hog Amri


Developpement/Application Web
Formulaires
 Formulaires à champ obligatoire

54 Chiraz El Hog Amri


Developpement/Application Web
Les filtres
 Apparue avec la version 5,2 de PHP
 Filtrer les données : valider ou nettoyer des données
inconnues.
 C'est particulièrement utile lorsque les sources
contiennent des données inconnues, comme les données
utilisateurs.
 Par exemple, les données pourraient provenir d'un
formulaire HTML.
 Il y a deux moyens de filtre : la validation et le nettoyage.

55 Chiraz El Hog Amri


Developpement/Application Web
Les filtres
 Principales fonctions
 filter_input(): valider ou nettoyer les données stockées dans les
superglobales
 filtrer_var(): valider ou nettoyer les variables
 filtrer_var_array(): valider ou nettoyer les données stochées
dans un tableau
 Types de filtres
 Filtres de validation
 Filtres de nettoyage

56 Chiraz El Hog Amri


Developpement/Application Web
Filtres de validation
 Vérifier si une donnée satisfait certains critères
 FILTER_VALIDATE_BOOLEAN: vérifie s’il s’agit d’un booléen
 FILTER_VALIDATE_EMAIL: vérifie s’il s’agit d’une adresse mail
valide
 FILTER_VALIDATE_FLOAT: vérifie s’il s’agit d’un nombre décimal
 FILTER_VALIDATE_INT: vérifie s’il s’agit d’un entier
 FILTER_VALIDATE_IP: vérifie s’il s’agit d’une adresse IP
 FILTER_VALIDATE_URL: vérifie s’il s’agit d’une url valide

57 Chiraz El Hog Amri


Developpement/Application Web
Filtres de nettoyage
 Nettoyer les données en retirant par exemple les caractères
indésirables
 FILTER_SANITIZE_EMAIL: supprime les caractères non désirés d’un
émail. Il autorise des chiffres, des lettres et $-_.+!*'{}|^~[]`#%/?@&=
 FILTER_SANITIZE_ENCODED: applique l’encodage URL et supprime
ou encode les caractères spéciaux
 FILTER_SANITIZE_MAGIC_QUOTES: applique addslashes ()
 FILTER_SANITIZE_NUMBER_FLOAT: supprime les caractères sauf les
chiffres, + , - , .
 FILTER_SANITIZE_NUMBER_INT: supprime les caractères sauf chiffres, +, -
 FILTER_SANITIZE_SPECIAL_CHARS: transforme en entité html les
caractères ‘ »<>& et les caractères ascii <32 et encode ou supprime les
autres carcatères spéciaux
 FILTER_SANITIZE_STRING: supprime les balises
 FILTER_SANITIZE_STRIPPED
 FILTER_UNSAFE_RAW

58 Chiraz El Hog Amri


Developpement/Application Web
Filtres

59 Chiraz El Hog Amri


Developpement/Application Web
Filtres
 Des constantes prédéfinies sont utilisées avec la fonction
filter_input()
 INPUT_POST
 INPUT_GET
 INPUT_SESSION

60 Chiraz El Hog Amri


Developpement/Application Web
Les cookies
 Qu'est-ce qu'un cookie ?
 Fichier texte créé par un script et stocké sur l’ordinateur des
visiteurs d’un site (65 Ko maxi)
 Permet de conserver des renseignements utiles sur chaque
utilisateur, et de les réutiliser lors de sa prochaine visite
 personnaliser les autres pages du site par un message personnel
comportant par exemple son nom, la date de sa dernière visite, ou
tout autre particularité.
 Ceci n'est possible que si le visiteur a entré lui-même ses
informations dans un formulaire sur le site
 Pour des raisons de sécurité, les cookies ne peuvent être lus que
par des pages issues du serveur qui les a créés

61 Chiraz El Hog Amri


Developpement/Application Web
Cookies
 Principe
 Le nombre de cookies qui peuvent être définis sur le même poste
client est limité à 20 et la taille de chacun est limitée à 4ko.
 Un navigateur peut stocker un maximum de 300 cookies
 La date d’expiration des cookies est définie de manière explicite par
le serveur web chargé de les mettre en place.

 Les cookies disponibles sont importés par PHP sous forme de


variables identifiées sous les noms utilisés par ces cookies

 La variable globale du serveur $_COOKIES enregistre tous les


cookies qui ont été définis

62 Chiraz El Hog Amri


Developpement/Application Web
Cookies
 Exemple d’application des cookies
 Mémorisation des paniers dans les applications d’e-commerce

 Identification des utilisateurs

 Des pages web personnalisées

 Afficher des menus personnalisés

 Afficher des pages adaptées aux utilisateurs en fonction de


leurs visites précédentes

63 Chiraz El Hog Amri


Developpement/Application Web
Cookies
 Création de cookie
 L’écriture de cookie est possible grâce à la fonction setcookie()
 il faut appeler cette fonction dès le début du script avant l’envoi
d’aucune autre information de la part du serveur vers le poste client.

bool setcookie(String name, String value, int expire, String path, String domain,
bool secure)

 Lorsqu'un cookie est créé depuis une page, il ne devient disponible


qu'à partir de la page suivante car il faut que le navigateur envoie le
cookie au serveur.

 Un cookie dont la date d'expiration n'est pas précisée est enregistré


dans la mémoire vive de l'ordinateur et non sur le disque dur. Il sera
effacé à la fermeture du navigateur.

64 Chiraz El Hog Amri


Developpement/Application Web
Cookies
 name : nom de la variable qui va stocker l’information sur le poste
client et qui sera utilisée pour récupérer cette information dans la
page qui lira le cookie. (obligatoire)

 value: valeur stockée dans la variable.


 expire: la date à laquelle le cookie ne sera plus lisible et sera effacé
du poste client (exprimée en ms)
 path: définit la destination (incluant les sous-répertoire) à laquelle
le navigateur doit envoyer le cookie.
 domain: le nom du domaine à partir duquel peuvent être lus les
cookies. ($SERVER_NAME )
 secure: un booleen qui vaut false si la connexion n’est pas
sécurisée, sinon, il vaut true pour une connexion sécurisée
HTTPS

65 Chiraz El Hog Amri


Developpement/Application Web
Cookies

66 Chiraz El Hog Amri


Developpement/Application Web
Cookies
 Lecture de cookies
 Les cookies sont accessibles dans le tableau associatif $_COOKIE
 Si celui-ci visite une des pages PHP de ce même domaine dont le chemin
est inclut dans le paramètre chemin (si le chemin est / le cookie est valide
pour toutes les pages de ce site).
 Il faut d’abord vérifier l’existence des variables dont les noms et les
valeurs ont été définis lors de la création du cookie.
 Cette vérification s’effectue grâce à la fonction isset($_COOKIE[‘name’])
qui renvoie true si la variable $name existe et false sinon.

67 Chiraz El Hog Amri


Developpement/Application Web
Cookies
 Écriture de plusieurs variables par un cookie
 Utilisation de la fonction compact() pour transformer les
variables en un tableau

 Convertir le tableau en une chaîne de caractère à l’aide de la


fonction implode()

 Affecter la chaîne créée à l’attribut « nom_cookie »

68 Chiraz El Hog Amri


Developpement/Application Web
Cookies
 Lecture de plusieurs variables d’un cookie
 Décomposé la chaîne stockée par la cookie et retrouver un tableau
en utilisant la fonction explode()

69 Chiraz El Hog Amri


Developpement/Application Web
Cookies
 Supprimer un cookie
 Il suffit de renvoyer le cookie grâce à la fonction setcookie() en
spécifiant simplement l'argument NomDuCookie

<?php
setcookie("Visites");
?>

 Une autre méthode consiste à envoyer un cookie dont la date


d'expiration est passée:

<?php
setcookie("Visites","",time()-1 )
?>

70 Chiraz El Hog Amri


Developpement/Application Web
Cookies

71 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
 Une session est un enchaînement de pages web qui
nécessite une mémoire des opérations effectuées et
réalisées par le même individu
 Transaction avec sa banque pour effectuer des opérations
 Transaction commerciale avec un site marchand
 Conserver plusieurs données lors d’une session
 Ranger les données de la session sur le serveur
 Sécuriser le passage des données vers le serveur en
 donnant un identifiant à la session
 cryptant l’identifiant
 Disposer de plusieurs sessions et donner un nom à
chacune

72 Chiraz El Hog Amri


Developpement/Application Web
Qu’est ce qu’une session?
 Une session est donc une période entre un début et une
fin d'une activité
 Par extension, on associe à une session un ensemble de
valeurs définies de manière transparente pour le visiteur
et que le serveur conserve de page en page, comme un
Cookie
 Les données d'une session sont cependant stockées sur
le serveur et non chez le client, ce qui l'empêche de
pouvoir les modifier manuellement, comme il peut le faire
pour un cookie

73 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
 PHP propose un mécanisme de sessions permettant de
sauvegarder sur le serveur les variables qui vont être
réutilisées dans chacune des pages
 Lorsque l’utilisateur revient sur le serveur, le navigateur
fournit un identifiant unique qui permet de reconnaître
l’utilisateur et de retrouver ses variables. Cet identifiant
est le sessionID, qui doit donc persister pendant
l’enchaînement des pages.

74 Chiraz El Hog Amri


Developpement/Application Web
La durée de vie d'une session
 Une session est, comme son nom l'indique, une session de
navigation
 Elle commence donc lors de l'accès à une page et se termine à
la fermeture du navigateur du client
 Une fois la session terminée, elle est détruite ainsi que toutes
les données qu'elle contient
 Elle ne doit donc contenir que des données temporaires
 Cependant, la session possède aussi un délai d'expiration
 Celui-ci peut être modifié dans la configuration du serveur
(directive session.gc_maxlifetime), mais vaut généralement une
trentaine de minutes
 Une fois ce délai dépassé, la session est supprimée

75 Chiraz El Hog Amri


Developpement/Application Web
Initialiser une session
 Pour pouvoir utiliser la fonctionnalité de session de PHP,
il faut lancer le moteur de session en utilisant la fonction
session_start()
 Cette fonction doit être en mesure d'envoyer des entêtes
HTTP
 Pour cela : aucune donnée ne doit donc avoir été
transmise au navigateur
 vous devez placer ce code au tout début de votre script
pour éviter que des choses soient transmises avant
<?php
session_start();
?>

76 Chiraz El Hog Amri


Developpement/Application Web
Nommer une session
 Une session porte par défaut le nom "PHPSESSID"
 C'est lui qui sera utilisé comme nom de session
 Pour le changer, utiliser la fonction session_name()

<?php
session_name('nom_de_session');
session_start();
?>

 Ce code va donc charger une session avec l'identifiant


provenant du cookie ou du paramètre GET portant le
nom : nom_de_session

77 Chiraz El Hog Amri


Developpement/Application Web
Donner un id à la session
 PHP détecte automatiquement l'identifiant à utiliser
 Cependant, on peut avoir besoin de le changer
manuellement, si on veut développer un système alternatif
pour passer l'identifiant de session entre les pages
 Pour définir manuellement l'identifiant de session, on
utilise la fonction session_id()

78 Chiraz El Hog Amri


Developpement/Application Web
Session
Lire et écrire des données dans la session

 Les données de la session sont très facilement


accessibles au travers d'un simple tableau PHP
 On utilise le tableau super-global $_SESSION
 Tout ce qui est stocké à l'intérieur est sauvegardé et
accessible depuis toutes les pages PHP utilisant les
sessions

79 Chiraz El Hog Amri


Developpement/Application Web
Sessions
Sauvegarder une variable
 Les variables de sessions sont stockées dans le tableau
super-global : $_SESSION
 <?php
session_start(); // Création de la session
$_SESSION['prenom'] = ‘Mohamed'; // Sauvegarde
dans la session créée de la variable "prenom"
?>

80 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
Récupérer des données d’une session
 Quand on démarre une session avec session_start(), le
tableau super-global $_SESSION est automatiquement
initialisé avec les variables de la session
 S'il contenait quelque chose, ce contenu n'est plus
disponible après

<?php
echo $_SESSION['prenom'];
?>

81 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
Tester si une variable appartient à une session

 Utiliser sur le tableau $_SESSION la fonction isset() qui


renvoie vrai si la variable passée en argument existe réellement
<?php
if (isset($_SESSION['prenom'])) {
echo 'La variable prenom est déjà enregistrée !';
// On est certain de pouvoir y accéder ici
} else {
echo 'La variable prenom n\'est pas enregistrée !';
}
?>

82 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
Authentification
 Le formulaire permet, par une page, de s’authentifier
 L'accès à toutes les autres pages dépend de cette
authentification
 Voici les étapes à suivre :
 Initialisez votre session
 Initialisez vos variables
 Affichez votre formulaire, ou effectuez son traitement :
 dans un cas, mes variables de session seront vides,
 dans l'autre, elles ne seront remplies que si le
traitement retourne un résultat correct
 Enfin, si le formulaire de connexion est validé, affichez un
lien pour passer à la page suivante en « mode connecté »
 Autrement, pas d'accès aux autres pages

83 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
 Supprimer une variable d'une session
 Utiliser unset() qui prend en paramètre la variable à
détruire

 <?php
unset($_SESSION['prenom']); // La variable de
//session "prenom" a été supprimée,
?>

84 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
 Détruire une session
 Utiliser session_destroy() qui ne prend aucun paramètre
et qui renvoie vrai en cas de succès et faux en cas
d'erreur

 Fonctionnement :
<?php
if (session_destroy()) {
echo 'Session détruite !';
} else {
echo 'Erreur : impossible de détruire la session !';
}
?>

85 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
 Détruire toutes les variables d'une session
 Il est aussi possible de détruire toutes les variables de
session, ce qui permet de conserver votre session
 il suffit tout simplement de réinitialiser le tableau
$_SESSION
 Il ne faut jamais utiliser unset() directement sur
$_SESSION, cela rendrait impossible l'accès aux
variables de la session courante jusqu'à sa fermeture
 <?php
$_SESSION = array(); // $_SESSION est désormais
//un tableau vide, toutes les variables
de session ont été supprimées
?>

86 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
 Utiliser plusieurs sessions dans la même page
 Il est impossible d'ouvrir simultanément plusieurs
sessions
 Cependant, on peut tout à fait ouvrir plusieurs sessions
l'une après l'autre
 Dans ce cas, il faut
 fermer la première session sans la détruire, grâce à
session_write_close()
 puis assigner les nouveaux session_name
 et enfin ouvrir la nouvelle session avec
session_start()

87 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
 <?php
session_name('utilisateur');
session_start(); // Création de la première session
[...] // Utilisation de la première session
session_write_close(); // Fermeture de la première
session, ses données sont sauvegardées.
session_name('admin'); // Indication du nom de la
seconde session
session_start(); // Ouverture de la seconde session
[...] // Utilisation de la seconde session.
?>

88 Chiraz El Hog Amri


Developpement/Application Web
Les sessions
 Une fois la session fermée, il est toujours possible d'accéder
en lecture (les modifications ne seront pas prises en compte)
aux variables de l'ancienne session
 $_SESSION ne sera vidé et rerempli qu'au prochain appel à
session_start()

89 Chiraz El Hog Amri


Developpement/Application Web
Interfaçage avec une base de données
MySQL
 Cinq étapes :

1 - Connexion au SGBD.
2 - Sélection d’une base.
3 - Envoi d’une requête.
4 - Récupération et utilisation du résultat.
5 - Fermeture de la connexion.

90 Chiraz El Hog Amri


Developpement/Application Web
Interfaçage avec une base de données
MySQL
 Connexion au SGBD :
$user = ’toto’ ;
$passwd = ’mdptoto’ ;
$machine = ’localhost’ ; machine où tourne PHP
$connect = mysql_connect($machine,$user,$passwd)
or die(échec de connexion au SGBD’) ;
 Choix de la base :
$bd = ’entreprise’ ;
mysql_select_db($bd,$connect) or die(échec lors de la
sélection de la base’) ;

91 Chiraz El Hog Amri


Developpement/Application Web
Interfaçage avec une base de données
MySQL
 $requete = ’une requete SQL’ ;
$resultat = mysql_query($requete,$connect)
or die(’Erreur durant l’exécution de la requête’) ;
 Exemple :

$salaire_max = 20000 ;
$requete = "SELECT nom FROM employe WHERE salaire <=
$salaire_max" ;
$resultat = mysql_query($requete,$connect) or die(’Erreur
durant l’exécution de la requête’) ;

92 Chiraz El Hog Amri


Developpement/Application Web
Interfaçage avec une base de données
MySQL
 Code type pour parcourir le résultat :

while ($nuplet = mysql_fetch_array($resultat)) {


...
}

 La boucle while permet de parcourir les n-uplets qui forment


le résultat (un n-uplet par tour de boucle).

93 Chiraz El Hog Amri


Developpement/Application Web
Interfaçage avec une base de données
MySQL

$salaire max = 20000 ;


$requete = "SELECT nom,salaire FROM employe "." WHERE
salaire <= $salaire max" ;
$resultat = mysql_query($requete,$connect)
or die(’Erreur durant l’exécution de la requête’) ;
while ($nuplet = mysql_fetch_array($resultat)) {
$nom = $nuplet[’nom’] ;
$sal = $nuplet[’salaire’] ;
print "<p>$nom gagne $salaire euros par ans.</p>" ;
}

94 Chiraz El Hog Amri


Developpement/Application Web
Interfaçage avec une base de données
MySQL
 Fermeture (après les requêtes) :
mysql_close($connect) ;

95 Chiraz El Hog Amri


Developpement/Application Web
Interfaçage avec une base de données
MySQL
Fonction Description
mysql_connect() Établit une connexion vers la base de données spécifiée dans
les arguments. Si cette base se trouve sur un port différent,
faites suivre le nom de la machine par (:) puis le numéro du
port (ex. :8080).
mysql_create_db() Permet de créer une nouvelle base de données.
mysql_drop_db() Permet de supprimer une base de données. Dans ce cas
toutes les données sont perdues.
mysql_select_db() Sélectionne la base de données par défaut.
mysql_query() Permet d'exécuter une requête SQL sur une ou plusieurs
tables d'une base de données . Si la requête exécute une
instruction: INSERT, DELETE ou UPDATE, une valeur
booléenne sera retournée (0 ou 1). Dans le cas d'une requête
de type SELECT, vous obtiendrez une référence du résultat.
mysql_error() Retourne la description textuelle d'une erreur générée par
la dernière action sur une base de données.
96 Chiraz El Hog Amri
Developpement/Application Web
Interfaçage avec une base de données
MySQL
Fonctions Description
Retourne le nombre de rangée affectées par la
mysql_affected_rows()
dernière requête faite sur la base de données.
Retourne un tableau qui représente un tuple du
mysql_fetch_array()
résultat.. Le tableau est indexée par un offset qui
commence par '0', et indexée par le nom du champ.
mysql_fetch_assoc() Comme mysql_fetch_array() mais indexée
uniquement par le nom du champ.
Comme mysql_fetch_array() mais indexée
mysql_fetch_row()
uniquement par le numéro d'ordre du champ.
mysql_num_rows() Retourne le nombre de rangées dans un résultat.
Cette fonction opère de la même manière
que mysql_connect(), sauf que la connexion ne se
mysql_pconnect()
referme pas à la fin de l'exécution du script sauf si
un mysql_close() se trouve en fin de script.
mysql_close() Ferme la connexion à une base de données.

97 Chiraz El Hog Amri


Developpement/Application Web

Vous aimerez peut-être aussi