SlideShare ist ein Scribd-Unternehmen logo
1 von 25
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

Weitere ähnliche Inhalte

Was ist angesagt?

Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
pierrepo
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Shellmates
 

Was ist angesagt? (20)

Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
Administration Base de données Oracle
Administration Base de données OracleAdministration Base de données Oracle
Administration Base de données Oracle
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
Platform freelance ASP .NET / C#
Platform freelance ASP .NET / C# Platform freelance ASP .NET / C#
Platform freelance ASP .NET / C#
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
Introduction au web cours.pdf
Introduction au web cours.pdfIntroduction au web cours.pdf
Introduction au web cours.pdf
 
Java
JavaJava
Java
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
 
cours Php
cours Phpcours Php
cours Php
 
Rapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelRapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilel
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
gestion de projet et MS-project.pdf
gestion de projet et MS-project.pdfgestion de projet et MS-project.pdf
gestion de projet et MS-project.pdf
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
 

Andere mochten auch

souvenirs 2007
souvenirs 2007souvenirs 2007
souvenirs 2007
kivars
 
A favor-del-decrecimiento
A favor-del-decrecimientoA favor-del-decrecimiento
A favor-del-decrecimiento
galuzby
 
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
 
Preguntasdeemprendimiento
PreguntasdeemprendimientoPreguntasdeemprendimiento
Preguntasdeemprendimiento
alejixx14
 
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
 
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
 

Andere mochten auch (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
 

Ähnlich wie 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
 
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
 

Ähnlich wie 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
 
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
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 

Mehr von Abdoulaye Dieng

Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
Abdoulaye Dieng
 

Mehr von 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 à 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
 
Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15
 

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

Hinweis der Redaktion

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