SlideShare une entreprise Scribd logo
PHP avancé 
Abdoulaye DIENG Juin 2014
Sommaire 
1) Traitement d’un formulaire 
a) Données renseignées 
b) Fichier uploadé 
2) Gestion d’une session 
3) Extension PDO
Traitement d’un formulaire 
données renseignées 
 Principaux attributs de l’élément form : 
• action="adresse_script_cible" 
script côté serveur qui traitera les données du formulaire. 
• method="get|post" 
méthode HTTP employée pour envoyer les données 
 Tout champ du formulaire doit avoir un nom 
• Attribut name="nomChamp" 
• Choix multiple : name="nomChamp[]" 
 Le script cible accède aux données transmises comme suit : 
• $_GET['nomChamp'] si method="get" 
• $_POST['nomChamp'] si method="post" 
App1&2 • $_REQUEST['nomChamp'] dans tous les cas
Traitement d’un formulaire 
fichier uploadé 
 Pour joindre un fichier à un formulaire : 
• attribut enctype="multipart/form-data" de l’élément form 
• méthode d’envoi : post 
• champ input de type file muni de l’attr name="nomChamp" 
 Le script destinataire accède aux infos (nom, type, taille, … ) sur 
un fichier joint par le biais du tableau super global 
$_FILES['nomChamp']. 
 Tout fichier uploadé est placé dans un répertoire temporaire 
 move_uploaded_file($nom_temporaire,$nom_definitif) 
déplace un fichier uploadé et retourne un booléen. 
App3
Sommaire 
1) Traitement d’un formulaire 
2) Gestion d’une session 
3) Extension PDO
Gestion d’une session 
présentation 
 La gestion d’une session permet d'enregistrer (côté serveur) des 
infos sur un internaute afin de les réutiliser durant toute sa visite. 
 Ces informations doivent être explicitement enregistrées dans le 
tableau associatif $_SESSION. 
 Ce qui permet ainsi de suivre un internaute de page en page, de 
sauvegarder un caddie, de sécuriser un site, etc. 
 Tout visiteur se voit assigner un "identifiant de session" 
permettant de retrouver des informations sur lui. 
 Cet identifiant est stocké dans un cookie (chez le client) ou 
propagé dans l'URL des pages visitées (méthode à risques). 
 Dans les versions récentes de PHP, réactiver la propagation par 
l’URL en modifiant, dans le fichier php.ini, les directives : 
• session.use_only_cookies = 0 
• session.use_trans_sid = 1 
 Une session doit obligatoirement démarrer avant l’envoi de toute 
information au navigateur.
Gestion d’une session 
exemple 
 Stockage d’une information dans une variable 
$total = 35000; // Montant d’une commande par exemple 
 Création ou prolongement d’une session 
session_start(); 
 Enregistrement de la variable ‘total’ dans la session 
$_SESSION[‘total’] = $total ; 
 Test de l’enregistrement de la variable ‘total’ dans la session 
if ( isset( ($_SESSION[‘total']) ) 
 Affichage de l’information (dans une autre page) 
echo $_SESSION[‘total’]; 
 Suppression de la variable de session associée à ‘total’ 
unset($_SESSION[‘total']); 
 Destruction de toutes les variables de session 
$_SESSION = array(); // Tableau vide 
 Destruction de la session 
session_destroy(); 
App4
Sommaire 
1) Traitement d’un formulaire 
2) Gestion d’une session 
3) Extension PDO 
a) Présentation 
b) Activation sous Windows 
c) Connexion/Déconnexion 
d) Gestion des erreurs 
e) Requêtes d’écriture 
f) Requête de lecture 
g) Exploitation d’une requête de lecture 
h) Requêtes préparées 
i) Autres méthodes
L’extension PDO 
présentation 
• PDO (Php Data Object) est une classe PHP permettant à PHP 
de communiquer avec un serveur de bases données. 
• PDO est une couche d'abstraction : création d'un code 
comportant des accès aux BDD en faisant abstraction du 
moteur de SGBD (MySQL, Oracle, PostgreSQL, ...) utilisé. 
• PDO facilite l’adaptation du code lors d’un changement de 
SGBD 
• PDO est fournit avec PHP 5.1 
• PDO sera activé par défaut à partir de PHP 6 
• L'utilisation de PDO en PHP utilise une approche de 
programmation orienté objet.
L’extension PDO 
activation sous Windows PHP 5.1.0 et plus 
1. Editer le fichier de config de php : php.ini 
2. Ajouter éventuellement (version<5.3) la ligne suivante pour 
activer l’extension PDO : 
extension=php_pdo.dll 
3. Décommenter certaines des lignes suivantes pour charger les 
pilotes spécifiques aux SGBDs utilisés: 
extension=php_pdo_firebird.dll 
extension=php_pdo_informix.dll 
extension=php_pdo_mssql.dll 
extension=php_pdo_mysql.dll 
extension=php_pdo_oci.dll 
extension=php_pdo_odbc.dll 
extension=php_pdo_pgsql.dll 
extension=php_pdo_sqlite.dll
L’extension PDO 
Connexion/Déconnexion 
• Connexion à l’aide du constructeur de la classe PDO qui reçoit : 
(string $dsn, string $user, string $pass, array $options ) 
Seul le 1er paramètre est obligatoire pour tous les SGBD 
• Retourne un objet PDO en cas de succès ou lève une 
exception PDOException sinon. 
• Syntaxe du DSN (nom de la source de données) 
$dsn = "piloteSGBD:host=$nomHote;dbname=$nomBD"; 
• Exemples de pilote 
mysql, oci, pgsql, sqlite. 
• La déconnexion se fait soit automatiquement à la fin de 
l'exécution du script (si la connexion n’est pas persistante), soit 
explicitement en détruisant l'objet PDO.
L’extension PDO 
Connexion/Déconnexion : exemple 
//Définition des paramètres de connexion 
define('USER','toto'); 
define('PASSWORD','secret'); 
define('DSN','mysql:host=localhost;dbname=maBase'); 
//connexion 
try 
{ 
$cnx = new PDO(DSN, USER, PASSWORD); 
} 
catch(PDOException $e) 
{ 
echo 'Erreur de connexion : ' . $e->getMessage(); 
} 
… 
//déconnexion explicite 
$cnx =NULL; 
Pour une connexion persistante, ajouter 
array(PDO::ATTR_PERSISTENT => true) 
comme 4ème paramètre au constructeur 
App5
L’extension PDO 
Gestion des erreurs 
• PDO admet trois comportements p/r aux erreurs : 
1. PDO::ERRMODE_SILENT (par défaut): aucun message 
d’erreur n’est affichée; il revient au développeur de vérifier les 
valeurs de retour et de chercher la cause d’une erreur avec la 
methode : array $objetPDO->errorInfo() 
2. PDO::ERRMODE_WARNING : émission d’alertes qui 
n’interrompent pas le script 
3. PDO::ERRMODE_EXCEPTION : déclenchement d’une 
exception PDOException avec la définition de ses propriétés afin 
de représenter les informations relatives à l’erreur. 
• Pour définir un comportement, modifier le paramètre 
PDO::ATTR_ERRMODE pour une des valeurs ci-dessus par 
l'intermédiaire de la méthode suivante : 
boolean $objetPDO->setAttribute(int $attribute, mixed $value);
L’extension PDO 
exécution des requêtes d’écriture 
int $objetPDO->exec(string $sql) 
• exec() exécute la requête (de type INSERT, UPDATE ou DELETE) reçue 
et retourne le nombre de lignes affectées par la requête ou bien FALSE 
en cas d’erreur. 
• Exemple (insertion dans la table membres(id_mbre, nom, prenom) ) 
$cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
try 
{ 
$req="insert into membres values ('','Dia', 'Issa')"; 
$nbrDeLignesAffectees=$cnx->exec($req); 
… 
} 
catch(PDOException $e) 
{ 
die ('Erreur sur l’insertion : '.$e->getMessage()); 
} 
Permet la 
gestion des 
exceptions 
App6&7
L’extension PDO 
exécution d’une requête de lecture 
PDOStatement $objetPDO->query(string $sql); 
• La méthode query() exécute la requête (de type SELECT) reçue et 
retourne le jeu d'enregistrements retourné par la requête en tant 
qu’objet PDOStatement ou FALSE si une erreur survient. 
• Exemple (consultation sur la table membres(id_mbre, nom, prenom) ) 
$cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
try 
{ 
$req="select prenom, nom from membres "; 
$rslt=$cnx->query($req); 
… 
} 
catch(PDOException $e) 
{ 
die ('Erreur sur la lecture : '.$e->getMessage()); 
}
L’extension PDO 
Traitement d’un jeu d'enregistrements 
• La méthode PDOStatement::fetch() récupère une ligne depuis un 
jeu d'enregistrements 
• Son 1er paramètre détermine le mode et peut valoir : 
– PDO::FETCH_ASSOC : tableau indexé par le nom de la 
colonne comme retourné dans le jeu d'enregistrements ; 
– PDO::FETCH_NUM : tableau indexé par le n° de la colonne 
comme retourné dans le jeu d'enregistrements ; 
– PDO::FETCH_BOTH (défaut) : combine les deux précédents ; 
– PDO::FETCH_OBJ : retourne un objet anonyme avec les 
noms de propriétés qui correspondent aux noms des 
colonnes retournés dans le jeu d'enregistrements. 
• Dans tous les cas, FALSE est retourné si une erreur survient.
L’extension PDO 
exemple du traitement d’un jeu d'enregistrements 
Exemple (consultation sur la table membres(id_mbre, nom, prenom) ) 
$cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
try 
{ 
$req="select prenom, nom from membres "; 
$rslt=$cnx->query($req); 
while($row=$rslt->fetch(PDO::FETCH_OBJ)) 
{ 
echo '<br />'.$row->prenom.' '. $row->nom; 
} 
} 
catch(PDOException $e) 
{ 
die ('Erreur sur la lecture : '.$e->getMessage()); 
} 
App8
L’extension PDO 
Requêtes préparées 
• Une requête à exécuter de nombreuses fois dans un script, 
sera à chaque fois, analysée, compilée, optimisée puis 
exécutée. 
• En utilisant une requête préparée, où seuls les paramètres 
changent, la requête sera uniquement exécutée, à partir de la 
seconde fois : ce qui peut être un gain important en terme de 
performances et de sécurisation des entrées utilisateurs. 
• En exécutant une seule fois une requête préparée, son temps 
d'exécution sera plus long qu'une requête simple mais on y 
gagne en sécurité (paramètres non interprétés).
L’extension PDO 
étapes de création d’une requête préparée (1/6) 
1. Inclusion des paramètres dans la syntaxe de la requête SQL 
2. Préparation de la requête 
3. Association des paramètres avec des valeurs ou des variables 
4. Exécution de la requête préparée
L’extension PDO 
étapes de création d’une requête préparée (2/6) 
1. Inclusion des paramètres dans la syntaxe de la requête SQL 
– Exemple avec des paramètres anonymes 
$req="insert into personnes values (?,?,?,?)"; 
– Exemple avec des paramètres nommés 
$req="insert into personnes values (:id,:pseudo,:age,:taille)"; 
2. Préparation de la requête 
La méthode PDO::prepare() permet d’envoyer la requête au 
serveur pour analyse, compilation et optimisation 
Exemple : 
$req_prepa=cnx->prepare($req);
L’extension PDO 
étapes de création d’une requête préparée (3/6) 
3. Association des paramètres avec des valeurs à l’aide d’un 
tableau 
– cas des paramètres anonymes 
$req="insert into personnes values (?,?,?,?)"; 
$req_prepa=cnx->prepare($req); 
$tab_des_val=array('','toto',25,1.85); 
– cas des paramètres nommés 
$req="insert into personnes values (:id,:pseudo,:age,:taille)"; 
$req_prepa=cnx->prepare($req); 
$tab_des_val=array(':id'=>'', ':pseudo'=>'toto', 
':age'=>25, ':taille'=>1.85);
L’extension PDO 
étapes de création d’une requête préparée (4/6) 
3. Association des paramètres avec des valeurs à l’aide de la 
méthode PDOStatement::bindValue() 
– cas des paramètres anonymes 
$req="insert into personnes values (?,?,?,?)"; 
$req_prepa=cnx->prepare($req); 
$req_prepa->bindValue(1,NULL,PDO::PARAM_NULL); 
$req_prepa->bindValue(2,'toto'); 
$req_prepa->bindValue(3,25,PDO::PARAM_INT); 
$req_prepa->bindValue(4,1.85); 
– cas des paramètres nommés 
$req="insert into personnes values (:id,:pseudo,:age,:taille)"; 
$req_prepa=cnx->prepare($req); 
$req_prepa->bindValue(':id',NULL,PDO::PARAM_NULL); 
$req_prepa->bindValue(':pseudo','toto',PDO::PARAM_STR);
L’extension PDO 
étapes de création d’une requête préparée (5/6) 
3. Association des paramètres avec des variables à l’aide de la 
méthode PDOStatement::bindParam() 
• bindParam() fonctionne de la même façon que bindValue() 
sauf que le 2ème argument est une variable passée par 
référence 
• La variable est liée à la valeur à associer en tant que référence 
et n’est évaluée qu'au moment de l‘exécution de la requête.
L’extension PDO 
étapes de création d’une requête préparée (6/6) 
4. Exécution de la requête préparée 
• La requête préparée est exécutée par la méthode 
bool PDOStatement::execute ([ array $input_parameters ] ) 
• Elle n’admet pas de paramètre si bindValue() ou bindParam() 
est utilisée lors de l’association des paramètres avec des 
variables. 
• Exemples 
– Sans argument : $req_prepa->execute(); 
– Avec argument : $req_prepa->execute($tab_des_val); 
App9
L’extension PDO 
Autres méthodes 
• Connaître l’ID du dernier enregistrement 
string PDO::lastInsertId ([ string $name = NULL ] ) 
Exemple 
$req="insert into membres values ('','Dia', 'Issa')"; 
$nbrDeLignesAffectees=$cnx->exec($req); 
echo 'ID du dernier membre : '. $cnx->lastInsertId(); 
• Connaître le nombre de lignes d’un jeu d'enregistrements 
int PDOStatement::rowCount () 
Exemple 
$req="select prenom, nom from membres"; 
$rslt=$cnx->query($req); 
echo $rslt->rowCount().' membres sélectionnés'; 
• NB : Ces méthodes ne sont pas reconnues par tous les SGBD 
App10

Contenu connexe

PDF
Fascicule de tp atelier développement web
Houda TOUKABRI
 
PDF
ADMINISTRATION DES RESEAUX INFORMATIQUES By Prof. YENDE R..pdf
FatimaMEBCHOUR2
 
PDF
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
MOHAMMED MOURADI
 
PDF
Fascicule tp programmation c
Missaoui Abdelbaki
 
PDF
BigData_TP2: Design Patterns dans Hadoop
Lilia Sfaxi
 
PDF
Cours structures des données (langage c)
rezgui mohamed
 
PDF
Rapport- Conception et réalisation d'une plateforme social learning
Rouâa Ben Hammouda
 
PDF
Tp n 3 linux
Amir Souissi
 
Fascicule de tp atelier développement web
Houda TOUKABRI
 
ADMINISTRATION DES RESEAUX INFORMATIQUES By Prof. YENDE R..pdf
FatimaMEBCHOUR2
 
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
MOHAMMED MOURADI
 
Fascicule tp programmation c
Missaoui Abdelbaki
 
BigData_TP2: Design Patterns dans Hadoop
Lilia Sfaxi
 
Cours structures des données (langage c)
rezgui mohamed
 
Rapport- Conception et réalisation d'une plateforme social learning
Rouâa Ben Hammouda
 
Tp n 3 linux
Amir Souissi
 

Tendances (20)

PDF
CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...
Madjid Meddah
 
PDF
Les bases de l'HTML / CSS
Samuel Robert
 
PPT
Cours Recherche sur Internet
Tunisie collège
 
PDF
Conception et Réalisation d'un Data Warehouse
Abderrahmane Filali
 
PPT
Réseaux informatiques: Reseau Local LAN
Tunisie collège
 
DOC
Cours access
Mouhssine Lamlaoui
 
PDF
Support du cours : Programmation Web 2
Faycel Chaoua
 
DOCX
Système d'exploitation
Abderrahim Bahssine
 
PDF
Cours python avancé
pierrepo
 
PDF
Cours complet Base de donne Bac
Amri Ossama
 
PDF
Support de cours angular
ENSET, Université Hassan II Casablanca
 
PDF
Chapitre 5 classes abstraites et interfaces
Amir Souissi
 
PDF
Tableur avance EXCEL
walid sassi
 
PDF
Fiche TD sur les systèmes informatiques
ATPENSC-Group
 
PPTX
CM processus-unifie
Yannick Prié (Enseignement)
 
PPTX
Introduction à Python
Abdoulaye Dieng
 
PPTX
Introduction aux bases de données
Abdoulaye Dieng
 
PPT
Formation jpa-hibernate-spring-data
Lhouceine OUHAMZA
 
PPTX
Chp2 - Cahier des Charges
Lilia Sfaxi
 
PPTX
Python.pptx
Jaouad Rachek
 
CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...
Madjid Meddah
 
Les bases de l'HTML / CSS
Samuel Robert
 
Cours Recherche sur Internet
Tunisie collège
 
Conception et Réalisation d'un Data Warehouse
Abderrahmane Filali
 
Réseaux informatiques: Reseau Local LAN
Tunisie collège
 
Cours access
Mouhssine Lamlaoui
 
Support du cours : Programmation Web 2
Faycel Chaoua
 
Système d'exploitation
Abderrahim Bahssine
 
Cours python avancé
pierrepo
 
Cours complet Base de donne Bac
Amri Ossama
 
Support de cours angular
ENSET, Université Hassan II Casablanca
 
Chapitre 5 classes abstraites et interfaces
Amir Souissi
 
Tableur avance EXCEL
walid sassi
 
Fiche TD sur les systèmes informatiques
ATPENSC-Group
 
CM processus-unifie
Yannick Prié (Enseignement)
 
Introduction à Python
Abdoulaye Dieng
 
Introduction aux bases de données
Abdoulaye Dieng
 
Formation jpa-hibernate-spring-data
Lhouceine OUHAMZA
 
Chp2 - Cahier des Charges
Lilia Sfaxi
 
Python.pptx
Jaouad Rachek
 
Publicité

En vedette (20)

PPTX
Csharp2 : classes et objets
Abdoulaye Dieng
 
PPTX
Introduction au Jquery
Abdoulaye Dieng
 
PPTX
Introduction à ajax
Abdoulaye Dieng
 
PPTX
introduction à MongoDB
Abdoulaye Dieng
 
PPSX
souvenirs 2007
kivars
 
PDF
A favor-del-decrecimiento
galuzby
 
PPT
echarpe de portage
jolilola
 
PPT
Gilbert RéVeillon Paris 2.0 23 Sept 09
charafs
 
DOCX
Preguntasdeemprendimiento
alejixx14
 
PPTX
Slide show Tempotraxx
PhilippeReyntjens
 
PDF
Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010
regiosuisse
 
PPT
Occlusion de l’auricule gauche par voie transcutanée : une alternative au tra...
Brussels Heart Center
 
PPT
PresentacióN GestióN Del Talento Y GestióN Del Conocimiento Jjaa
Juan José Arias
 
PPS
Plaquette Réseaux Sociaux
Paragraphe Imageurs
 
PDF
Guideutilisateur
Corporama
 
PDF
4 Paris 2
charafs
 
PPS
R A M A D A N I A T E S 04
nadia-vraie Nom de famille
 
DOCX
Mettez les verbes suivants au présent iii groupe
Grama Violeta
 
Csharp2 : classes et objets
Abdoulaye Dieng
 
Introduction au Jquery
Abdoulaye Dieng
 
Introduction à ajax
Abdoulaye Dieng
 
introduction à MongoDB
Abdoulaye Dieng
 
souvenirs 2007
kivars
 
A favor-del-decrecimiento
galuzby
 
echarpe de portage
jolilola
 
Gilbert RéVeillon Paris 2.0 23 Sept 09
charafs
 
Preguntasdeemprendimiento
alejixx14
 
Slide show Tempotraxx
PhilippeReyntjens
 
Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010
regiosuisse
 
Occlusion de l’auricule gauche par voie transcutanée : une alternative au tra...
Brussels Heart Center
 
PresentacióN GestióN Del Talento Y GestióN Del Conocimiento Jjaa
Juan José Arias
 
Plaquette Réseaux Sociaux
Paragraphe Imageurs
 
Guideutilisateur
Corporama
 
4 Paris 2
charafs
 
R A M A D A N I A T E S 04
nadia-vraie Nom de famille
 
Mettez les verbes suivants au présent iii groupe
Grama Violeta
 
Publicité

Similaire à php2 : formulaire-session-PDO (20)

PPTX
pro_Langage_PHP_LES_FONCTIONALITES_AVANCEES__L2_ DAWN & ASRS.pptx
AhmatAbakar1
 
PPT
Soutenance Zend Framework vs Symfony
Vincent Composieux
 
PDF
Communications Réseaux et HTTP avec PHP
julien pauli
 
PPTX
Introduction à Symfony
Abdoulaye Dieng
 
PPT
PHP_partie_.ppt,php_cours_mathematiques_informatiques
oumaimanouari
 
PDF
Des tests modernes pour Drupal
Christophe Villeneuve
 
PPTX
SOLID : les principes à l’origine du succès de Symfony et de vos applications
Vladyslav Riabchenko
 
PDF
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 
PPTX
Atelier WordPress: Création d&rsquo;extension WordPress
IZZA Samir
 
PPTX
Drupal 8, symfony
jeUXdiCode
 
PPTX
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 
PDF
Mop export-dataloader-salesforce-en-ligne-commande
Cyrille Coeurjoly
 
PPT
PostgreSQL sous linux
Khalid ALLILI
 
PPT
Formation php pdo
Souhaibou Salla
 
PDF
Php 2 - Approfondissement MySQL, PDO et MVC
Pierre Faure
 
PDF
Notions de base de JavaScript
Kristen Le Liboux
 
PDF
iTunes Stats
CocoaHeads France
 
PPTX
Initiation à Express js
Abdoulaye Dieng
 
KEY
Paris RailsCamp 2009
Olivier Gutknecht
 
PPTX
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
pro_Langage_PHP_LES_FONCTIONALITES_AVANCEES__L2_ DAWN & ASRS.pptx
AhmatAbakar1
 
Soutenance Zend Framework vs Symfony
Vincent Composieux
 
Communications Réseaux et HTTP avec PHP
julien pauli
 
Introduction à Symfony
Abdoulaye Dieng
 
PHP_partie_.ppt,php_cours_mathematiques_informatiques
oumaimanouari
 
Des tests modernes pour Drupal
Christophe Villeneuve
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
Vladyslav Riabchenko
 
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 
Atelier WordPress: Création d&rsquo;extension WordPress
IZZA Samir
 
Drupal 8, symfony
jeUXdiCode
 
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 
Mop export-dataloader-salesforce-en-ligne-commande
Cyrille Coeurjoly
 
PostgreSQL sous linux
Khalid ALLILI
 
Formation php pdo
Souhaibou Salla
 
Php 2 - Approfondissement MySQL, PDO et MVC
Pierre Faure
 
Notions de base de JavaScript
Kristen Le Liboux
 
iTunes Stats
CocoaHeads France
 
Initiation à Express js
Abdoulaye Dieng
 
Paris RailsCamp 2009
Olivier Gutknecht
 
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 

Plus de Abdoulaye Dieng (20)

PPTX
Introduction à React
Abdoulaye Dieng
 
PPTX
Fondamentaux du Référencement naturel
Abdoulaye Dieng
 
PPTX
Panorama des Technologies mobiles
Abdoulaye Dieng
 
PPTX
Prise en main de WordPress
Abdoulaye Dieng
 
PPTX
Initiation à Bootstrap
Abdoulaye Dieng
 
PPTX
Introduction à Laravel
Abdoulaye Dieng
 
PPTX
Fondamentaux d’une API REST
Abdoulaye Dieng
 
PPTX
Introduction à Angular
Abdoulaye Dieng
 
PPTX
Introduction à JavaScript
Abdoulaye Dieng
 
PPTX
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
PPTX
Introduction à React JS
Abdoulaye Dieng
 
PPTX
Initiation à l'algorithmique
Abdoulaye Dieng
 
PPTX
Introduction à Symfony
Abdoulaye Dieng
 
PPTX
Initiation à Bootstrap
Abdoulaye Dieng
 
PPTX
Requêtes HTTP synchrones et asynchrones
Abdoulaye Dieng
 
PPTX
Introduction à jQuery
Abdoulaye Dieng
 
PPT
Introduction à JavaScript
Abdoulaye Dieng
 
PPTX
Initiation à l'algorithmique
Abdoulaye Dieng
 
PPTX
Introduction à HTML 5
Abdoulaye Dieng
 
PPTX
Introduction à AngularJS
Abdoulaye Dieng
 
Introduction à React
Abdoulaye Dieng
 
Fondamentaux du Référencement naturel
Abdoulaye Dieng
 
Panorama des Technologies mobiles
Abdoulaye Dieng
 
Prise en main de WordPress
Abdoulaye Dieng
 
Initiation à Bootstrap
Abdoulaye Dieng
 
Introduction à Laravel
Abdoulaye Dieng
 
Fondamentaux d’une API REST
Abdoulaye Dieng
 
Introduction à Angular
Abdoulaye Dieng
 
Introduction à JavaScript
Abdoulaye Dieng
 
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
Introduction à React JS
Abdoulaye Dieng
 
Initiation à l'algorithmique
Abdoulaye Dieng
 
Introduction à Symfony
Abdoulaye Dieng
 
Initiation à Bootstrap
Abdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Abdoulaye Dieng
 
Introduction à jQuery
Abdoulaye Dieng
 
Introduction à JavaScript
Abdoulaye Dieng
 
Initiation à l'algorithmique
Abdoulaye Dieng
 
Introduction à HTML 5
Abdoulaye Dieng
 
Introduction à AngularJS
Abdoulaye Dieng
 

php2 : formulaire-session-PDO

  • 1. PHP avancé Abdoulaye DIENG Juin 2014
  • 2. Sommaire 1) Traitement d’un formulaire a) Données renseignées b) Fichier uploadé 2) Gestion d’une session 3) Extension PDO
  • 3. Traitement d’un formulaire données renseignées  Principaux attributs de l’élément form : • action="adresse_script_cible" script côté serveur qui traitera les données du formulaire. • method="get|post" méthode HTTP employée pour envoyer les données  Tout champ du formulaire doit avoir un nom • Attribut name="nomChamp" • Choix multiple : name="nomChamp[]"  Le script cible accède aux données transmises comme suit : • $_GET['nomChamp'] si method="get" • $_POST['nomChamp'] si method="post" App1&2 • $_REQUEST['nomChamp'] dans tous les cas
  • 4. Traitement d’un formulaire fichier uploadé  Pour joindre un fichier à un formulaire : • attribut enctype="multipart/form-data" de l’élément form • méthode d’envoi : post • champ input de type file muni de l’attr name="nomChamp"  Le script destinataire accède aux infos (nom, type, taille, … ) sur un fichier joint par le biais du tableau super global $_FILES['nomChamp'].  Tout fichier uploadé est placé dans un répertoire temporaire  move_uploaded_file($nom_temporaire,$nom_definitif) déplace un fichier uploadé et retourne un booléen. App3
  • 5. Sommaire 1) Traitement d’un formulaire 2) Gestion d’une session 3) Extension PDO
  • 6. Gestion d’une session présentation  La gestion d’une session permet d'enregistrer (côté serveur) des infos sur un internaute afin de les réutiliser durant toute sa visite.  Ces informations doivent être explicitement enregistrées dans le tableau associatif $_SESSION.  Ce qui permet ainsi de suivre un internaute de page en page, de sauvegarder un caddie, de sécuriser un site, etc.  Tout visiteur se voit assigner un "identifiant de session" permettant de retrouver des informations sur lui.  Cet identifiant est stocké dans un cookie (chez le client) ou propagé dans l'URL des pages visitées (méthode à risques).  Dans les versions récentes de PHP, réactiver la propagation par l’URL en modifiant, dans le fichier php.ini, les directives : • session.use_only_cookies = 0 • session.use_trans_sid = 1  Une session doit obligatoirement démarrer avant l’envoi de toute information au navigateur.
  • 7. Gestion d’une session exemple  Stockage d’une information dans une variable $total = 35000; // Montant d’une commande par exemple  Création ou prolongement d’une session session_start();  Enregistrement de la variable ‘total’ dans la session $_SESSION[‘total’] = $total ;  Test de l’enregistrement de la variable ‘total’ dans la session if ( isset( ($_SESSION[‘total']) )  Affichage de l’information (dans une autre page) echo $_SESSION[‘total’];  Suppression de la variable de session associée à ‘total’ unset($_SESSION[‘total']);  Destruction de toutes les variables de session $_SESSION = array(); // Tableau vide  Destruction de la session session_destroy(); App4
  • 8. Sommaire 1) Traitement d’un formulaire 2) Gestion d’une session 3) Extension PDO a) Présentation b) Activation sous Windows c) Connexion/Déconnexion d) Gestion des erreurs e) Requêtes d’écriture f) Requête de lecture g) Exploitation d’une requête de lecture h) Requêtes préparées i) Autres méthodes
  • 9. L’extension PDO présentation • PDO (Php Data Object) est une classe PHP permettant à PHP de communiquer avec un serveur de bases données. • PDO est une couche d'abstraction : création d'un code comportant des accès aux BDD en faisant abstraction du moteur de SGBD (MySQL, Oracle, PostgreSQL, ...) utilisé. • PDO facilite l’adaptation du code lors d’un changement de SGBD • PDO est fournit avec PHP 5.1 • PDO sera activé par défaut à partir de PHP 6 • L'utilisation de PDO en PHP utilise une approche de programmation orienté objet.
  • 10. L’extension PDO activation sous Windows PHP 5.1.0 et plus 1. Editer le fichier de config de php : php.ini 2. Ajouter éventuellement (version<5.3) la ligne suivante pour activer l’extension PDO : extension=php_pdo.dll 3. Décommenter certaines des lignes suivantes pour charger les pilotes spécifiques aux SGBDs utilisés: extension=php_pdo_firebird.dll extension=php_pdo_informix.dll extension=php_pdo_mssql.dll extension=php_pdo_mysql.dll extension=php_pdo_oci.dll extension=php_pdo_odbc.dll extension=php_pdo_pgsql.dll extension=php_pdo_sqlite.dll
  • 11. L’extension PDO Connexion/Déconnexion • Connexion à l’aide du constructeur de la classe PDO qui reçoit : (string $dsn, string $user, string $pass, array $options ) Seul le 1er paramètre est obligatoire pour tous les SGBD • Retourne un objet PDO en cas de succès ou lève une exception PDOException sinon. • Syntaxe du DSN (nom de la source de données) $dsn = "piloteSGBD:host=$nomHote;dbname=$nomBD"; • Exemples de pilote mysql, oci, pgsql, sqlite. • La déconnexion se fait soit automatiquement à la fin de l'exécution du script (si la connexion n’est pas persistante), soit explicitement en détruisant l'objet PDO.
  • 12. L’extension PDO Connexion/Déconnexion : exemple //Définition des paramètres de connexion define('USER','toto'); define('PASSWORD','secret'); define('DSN','mysql:host=localhost;dbname=maBase'); //connexion try { $cnx = new PDO(DSN, USER, PASSWORD); } catch(PDOException $e) { echo 'Erreur de connexion : ' . $e->getMessage(); } … //déconnexion explicite $cnx =NULL; Pour une connexion persistante, ajouter array(PDO::ATTR_PERSISTENT => true) comme 4ème paramètre au constructeur App5
  • 13. L’extension PDO Gestion des erreurs • PDO admet trois comportements p/r aux erreurs : 1. PDO::ERRMODE_SILENT (par défaut): aucun message d’erreur n’est affichée; il revient au développeur de vérifier les valeurs de retour et de chercher la cause d’une erreur avec la methode : array $objetPDO->errorInfo() 2. PDO::ERRMODE_WARNING : émission d’alertes qui n’interrompent pas le script 3. PDO::ERRMODE_EXCEPTION : déclenchement d’une exception PDOException avec la définition de ses propriétés afin de représenter les informations relatives à l’erreur. • Pour définir un comportement, modifier le paramètre PDO::ATTR_ERRMODE pour une des valeurs ci-dessus par l'intermédiaire de la méthode suivante : boolean $objetPDO->setAttribute(int $attribute, mixed $value);
  • 14. L’extension PDO exécution des requêtes d’écriture int $objetPDO->exec(string $sql) • exec() exécute la requête (de type INSERT, UPDATE ou DELETE) reçue et retourne le nombre de lignes affectées par la requête ou bien FALSE en cas d’erreur. • Exemple (insertion dans la table membres(id_mbre, nom, prenom) ) $cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $req="insert into membres values ('','Dia', 'Issa')"; $nbrDeLignesAffectees=$cnx->exec($req); … } catch(PDOException $e) { die ('Erreur sur l’insertion : '.$e->getMessage()); } Permet la gestion des exceptions App6&7
  • 15. L’extension PDO exécution d’une requête de lecture PDOStatement $objetPDO->query(string $sql); • La méthode query() exécute la requête (de type SELECT) reçue et retourne le jeu d'enregistrements retourné par la requête en tant qu’objet PDOStatement ou FALSE si une erreur survient. • Exemple (consultation sur la table membres(id_mbre, nom, prenom) ) $cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $req="select prenom, nom from membres "; $rslt=$cnx->query($req); … } catch(PDOException $e) { die ('Erreur sur la lecture : '.$e->getMessage()); }
  • 16. L’extension PDO Traitement d’un jeu d'enregistrements • La méthode PDOStatement::fetch() récupère une ligne depuis un jeu d'enregistrements • Son 1er paramètre détermine le mode et peut valoir : – PDO::FETCH_ASSOC : tableau indexé par le nom de la colonne comme retourné dans le jeu d'enregistrements ; – PDO::FETCH_NUM : tableau indexé par le n° de la colonne comme retourné dans le jeu d'enregistrements ; – PDO::FETCH_BOTH (défaut) : combine les deux précédents ; – PDO::FETCH_OBJ : retourne un objet anonyme avec les noms de propriétés qui correspondent aux noms des colonnes retournés dans le jeu d'enregistrements. • Dans tous les cas, FALSE est retourné si une erreur survient.
  • 17. L’extension PDO exemple du traitement d’un jeu d'enregistrements Exemple (consultation sur la table membres(id_mbre, nom, prenom) ) $cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $req="select prenom, nom from membres "; $rslt=$cnx->query($req); while($row=$rslt->fetch(PDO::FETCH_OBJ)) { echo '<br />'.$row->prenom.' '. $row->nom; } } catch(PDOException $e) { die ('Erreur sur la lecture : '.$e->getMessage()); } App8
  • 18. L’extension PDO Requêtes préparées • Une requête à exécuter de nombreuses fois dans un script, sera à chaque fois, analysée, compilée, optimisée puis exécutée. • En utilisant une requête préparée, où seuls les paramètres changent, la requête sera uniquement exécutée, à partir de la seconde fois : ce qui peut être un gain important en terme de performances et de sécurisation des entrées utilisateurs. • En exécutant une seule fois une requête préparée, son temps d'exécution sera plus long qu'une requête simple mais on y gagne en sécurité (paramètres non interprétés).
  • 19. L’extension PDO étapes de création d’une requête préparée (1/6) 1. Inclusion des paramètres dans la syntaxe de la requête SQL 2. Préparation de la requête 3. Association des paramètres avec des valeurs ou des variables 4. Exécution de la requête préparée
  • 20. L’extension PDO étapes de création d’une requête préparée (2/6) 1. Inclusion des paramètres dans la syntaxe de la requête SQL – Exemple avec des paramètres anonymes $req="insert into personnes values (?,?,?,?)"; – Exemple avec des paramètres nommés $req="insert into personnes values (:id,:pseudo,:age,:taille)"; 2. Préparation de la requête La méthode PDO::prepare() permet d’envoyer la requête au serveur pour analyse, compilation et optimisation Exemple : $req_prepa=cnx->prepare($req);
  • 21. L’extension PDO étapes de création d’une requête préparée (3/6) 3. Association des paramètres avec des valeurs à l’aide d’un tableau – cas des paramètres anonymes $req="insert into personnes values (?,?,?,?)"; $req_prepa=cnx->prepare($req); $tab_des_val=array('','toto',25,1.85); – cas des paramètres nommés $req="insert into personnes values (:id,:pseudo,:age,:taille)"; $req_prepa=cnx->prepare($req); $tab_des_val=array(':id'=>'', ':pseudo'=>'toto', ':age'=>25, ':taille'=>1.85);
  • 22. L’extension PDO étapes de création d’une requête préparée (4/6) 3. Association des paramètres avec des valeurs à l’aide de la méthode PDOStatement::bindValue() – cas des paramètres anonymes $req="insert into personnes values (?,?,?,?)"; $req_prepa=cnx->prepare($req); $req_prepa->bindValue(1,NULL,PDO::PARAM_NULL); $req_prepa->bindValue(2,'toto'); $req_prepa->bindValue(3,25,PDO::PARAM_INT); $req_prepa->bindValue(4,1.85); – cas des paramètres nommés $req="insert into personnes values (:id,:pseudo,:age,:taille)"; $req_prepa=cnx->prepare($req); $req_prepa->bindValue(':id',NULL,PDO::PARAM_NULL); $req_prepa->bindValue(':pseudo','toto',PDO::PARAM_STR);
  • 23. L’extension PDO étapes de création d’une requête préparée (5/6) 3. Association des paramètres avec des variables à l’aide de la méthode PDOStatement::bindParam() • bindParam() fonctionne de la même façon que bindValue() sauf que le 2ème argument est une variable passée par référence • La variable est liée à la valeur à associer en tant que référence et n’est évaluée qu'au moment de l‘exécution de la requête.
  • 24. L’extension PDO étapes de création d’une requête préparée (6/6) 4. Exécution de la requête préparée • La requête préparée est exécutée par la méthode bool PDOStatement::execute ([ array $input_parameters ] ) • Elle n’admet pas de paramètre si bindValue() ou bindParam() est utilisée lors de l’association des paramètres avec des variables. • Exemples – Sans argument : $req_prepa->execute(); – Avec argument : $req_prepa->execute($tab_des_val); App9
  • 25. L’extension PDO Autres méthodes • Connaître l’ID du dernier enregistrement string PDO::lastInsertId ([ string $name = NULL ] ) Exemple $req="insert into membres values ('','Dia', 'Issa')"; $nbrDeLignesAffectees=$cnx->exec($req); echo 'ID du dernier membre : '. $cnx->lastInsertId(); • Connaître le nombre de lignes d’un jeu d'enregistrements int PDOStatement::rowCount () Exemple $req="select prenom, nom from membres"; $rslt=$cnx->query($req); echo $rslt->rowCount().' membres sélectionnés'; • NB : Ces méthodes ne sont pas reconnues par tous les SGBD App10

Notes de l'éditeur

  • #4: PHP M. DIENG
  • #5: PHP M. DIENG
  • #7: PHP M. DIENG
  • #8: PHP M. DIENG