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

Tendances

Tp n 1 linux
Tp n 1 linuxTp n 1 linux
Tp n 1 linux
Amir Souissi
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
Yassine Badri
 
Examen sybase - Administration base de donnees
Examen sybase - Administration base de donneesExamen sybase - Administration base de donnees
Examen sybase - Administration base de donnees
webreaker
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
IdrissaDembl
 
Notes de cours et tp - Administation Systèmes
Notes de cours et tp  - Administation Systèmes Notes de cours et tp  - Administation Systèmes
Notes de cours et tp - Administation Systèmes
Ikram Benabdelouahab
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
kadzaki
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
Abdelouahed Abdou
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
Ines Ouaz
 
Gestion des utilisateurs et groupes / Users & groups management
Gestion des utilisateurs et groupes / Users & groups managementGestion des utilisateurs et groupes / Users & groups management
Gestion des utilisateurs et groupes / Users & groups management
ABDELLAH EL MAMOUN
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
Houda TOUKABRI
 
Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jadeSystèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
ENSET, Université Hassan II Casablanca
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
ECAM Brussels Engineering School
 
alphorm.com - Formation Cisco ICND1-CCENT (100-101)
alphorm.com - Formation Cisco ICND1-CCENT (100-101)alphorm.com - Formation Cisco ICND1-CCENT (100-101)
alphorm.com - Formation Cisco ICND1-CCENT (100-101)
Alphorm
 
Le langage sql
Le langage sqlLe langage sql
Le langage sql
Abderrahim Aitali
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
Mouna Torjmen
 
Correction TD Adressage IP.pdf
Correction  TD Adressage IP.pdfCorrection  TD Adressage IP.pdf
Correction TD Adressage IP.pdf
ssuser18776b
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
ECAM Brussels Engineering School
 
Introduction à pl/sql
Introduction à pl/sqlIntroduction à pl/sql
Introduction à pl/sql
Abdelouahed Abdou
 
Internet et ses services
Internet et ses servicesInternet et ses services
Internet et ses services
Abdoulaye Dieng
 

Tendances (20)

Tp n 1 linux
Tp n 1 linuxTp n 1 linux
Tp n 1 linux
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
Examen sybase - Administration base de donnees
Examen sybase - Administration base de donneesExamen sybase - Administration base de donnees
Examen sybase - Administration base de donnees
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
 
Notes de cours et tp - Administation Systèmes
Notes de cours et tp  - Administation Systèmes Notes de cours et tp  - Administation Systèmes
Notes de cours et tp - Administation Systèmes
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Gestion des utilisateurs et groupes / Users & groups management
Gestion des utilisateurs et groupes / Users & groups managementGestion des utilisateurs et groupes / Users & groups management
Gestion des utilisateurs et groupes / Users & groups management
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jadeSystèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
alphorm.com - Formation Cisco ICND1-CCENT (100-101)
alphorm.com - Formation Cisco ICND1-CCENT (100-101)alphorm.com - Formation Cisco ICND1-CCENT (100-101)
alphorm.com - Formation Cisco ICND1-CCENT (100-101)
 
Le langage sql
Le langage sqlLe langage sql
Le langage sql
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Correction TD Adressage IP.pdf
Correction  TD Adressage IP.pdfCorrection  TD Adressage IP.pdf
Correction TD Adressage IP.pdf
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Introduction à pl/sql
Introduction à pl/sqlIntroduction à pl/sql
Introduction à pl/sql
 
Internet et ses services
Internet et ses servicesInternet et ses services
Internet et ses services
 

En vedette

Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
Abdoulaye Dieng
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
Abdoulaye Dieng
 
Introduction à ajax
Introduction à ajaxIntroduction à ajax
Introduction à ajax
Abdoulaye Dieng
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
Abdoulaye Dieng
 
souvenirs 2007
souvenirs 2007souvenirs 2007
souvenirs 2007
kivars
 
A favor-del-decrecimiento
A favor-del-decrecimientoA favor-del-decrecimiento
A favor-del-decrecimiento
galuzby
 
echarpe de portage
echarpe de portageecharpe de portage
echarpe de portage
jolilola
 
Gilbert RéVeillon Paris 2.0 23 Sept 09
Gilbert RéVeillon Paris 2.0 23 Sept 09Gilbert RéVeillon Paris 2.0 23 Sept 09
Gilbert RéVeillon Paris 2.0 23 Sept 09
charafs
 
La casita de chocolate
La casita de chocolateLa casita de chocolate
Preguntasdeemprendimiento
PreguntasdeemprendimientoPreguntasdeemprendimiento
Preguntasdeemprendimiento
alejixx14
 
Slide show Tempotraxx
Slide show TempotraxxSlide show Tempotraxx
Slide show Tempotraxx
PhilippeReyntjens
 
Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010
Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010
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...
Occlusion de l’auricule gauche par voie transcutanée : une alternative au tra...Occlusion de l’auricule gauche par voie transcutanée : une alternative au tra...
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
PresentacióN GestióN Del Talento Y GestióN Del Conocimiento JjaaPresentacióN GestióN Del Talento Y GestióN Del Conocimiento Jjaa
PresentacióN GestióN Del Talento Y GestióN Del Conocimiento Jjaa
Juan José Arias
 
Plaquette Réseaux Sociaux
Plaquette Réseaux SociauxPlaquette Réseaux Sociaux
Plaquette Réseaux Sociaux
Paragraphe Imageurs
 
Guideutilisateur
GuideutilisateurGuideutilisateur
Guideutilisateur
Corporama
 
4 Paris 2
4 Paris 24 Paris 2
4 Paris 2
charafs
 
Mettez les verbes suivants au présent iii groupe
Mettez les verbes suivants au présent  iii groupeMettez les verbes suivants au présent  iii groupe
Mettez les verbes suivants au présent iii groupe
Grama Violeta
 

En vedette (20)

Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Introduction à ajax
Introduction à ajaxIntroduction à ajax
Introduction à ajax
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
souvenirs 2007
souvenirs 2007souvenirs 2007
souvenirs 2007
 
A favor-del-decrecimiento
A favor-del-decrecimientoA favor-del-decrecimiento
A favor-del-decrecimiento
 
echarpe de portage
echarpe de portageecharpe de portage
echarpe de portage
 
Gilbert RéVeillon Paris 2.0 23 Sept 09
Gilbert RéVeillon Paris 2.0 23 Sept 09Gilbert RéVeillon Paris 2.0 23 Sept 09
Gilbert RéVeillon Paris 2.0 23 Sept 09
 
La casita de chocolate
La casita de chocolateLa casita de chocolate
La casita de chocolate
 
Preguntasdeemprendimiento
PreguntasdeemprendimientoPreguntasdeemprendimiento
Preguntasdeemprendimiento
 
Fcd Bel H
Fcd Bel HFcd Bel H
Fcd Bel H
 
Slide show Tempotraxx
Slide show TempotraxxSlide show Tempotraxx
Slide show Tempotraxx
 
Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010
Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010
Implantation de villages de vacances et d'hôtels (annexes) 15.12.2010
 
Occlusion de l’auricule gauche par voie transcutanée : une alternative au tra...
Occlusion de l’auricule gauche par voie transcutanée : une alternative au tra...Occlusion de l’auricule gauche par voie transcutanée : une alternative au tra...
Occlusion de l’auricule gauche par voie transcutanée : une alternative au tra...
 
PresentacióN GestióN Del Talento Y GestióN Del Conocimiento Jjaa
PresentacióN GestióN Del Talento Y GestióN Del Conocimiento JjaaPresentacióN GestióN Del Talento Y GestióN Del Conocimiento Jjaa
PresentacióN GestióN Del Talento Y GestióN Del Conocimiento Jjaa
 
Plaquette Réseaux Sociaux
Plaquette Réseaux SociauxPlaquette Réseaux Sociaux
Plaquette Réseaux Sociaux
 
Guideutilisateur
GuideutilisateurGuideutilisateur
Guideutilisateur
 
4 Paris 2
4 Paris 24 Paris 2
4 Paris 2
 
R A M A D A N I A T E S 04
R A M A D A N I A T E S 04R A M A D A N I A T E S 04
R A M A D A N I A T E S 04
 
Mettez les verbes suivants au présent iii groupe
Mettez les verbes suivants au présent  iii groupeMettez les verbes suivants au présent  iii groupe
Mettez les verbes suivants au présent iii groupe
 

Similaire à php2 : formulaire-session-PDO

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

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

Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
PHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiquesPHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiques
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPress
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Mop export-dataloader-salesforce-en-ligne-commande
Mop export-dataloader-salesforce-en-ligne-commandeMop export-dataloader-salesforce-en-ligne-commande
Mop export-dataloader-salesforce-en-ligne-commande
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Formation php pdo
Formation php pdoFormation php pdo
Formation php pdo
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 

Plus de Abdoulaye Dieng

Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
Abdoulaye Dieng
 
Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturel
Abdoulaye Dieng
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobiles
Abdoulaye Dieng
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPress
Abdoulaye Dieng
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
Abdoulaye Dieng
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
Abdoulaye Dieng
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
Abdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Abdoulaye Dieng
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
Abdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
Abdoulaye Dieng
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
Abdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
Abdoulaye Dieng
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
Abdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Abdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
Introduction à HTML 5
Introduction à HTML 5Introduction à HTML 5
Introduction à HTML 5
Abdoulaye Dieng
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
Abdoulaye Dieng
 

Plus de Abdoulaye Dieng (20)

Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturel
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobiles
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPress
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Introduction à HTML 5
Introduction à HTML 5Introduction à HTML 5
Introduction à HTML 5
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
 

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

  1. PHP M. DIENG
  2. PHP M. DIENG
  3. PHP M. DIENG
  4. PHP M. DIENG