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) Extensio...
Traitement d’un formulaire 
données renseignées 
 Principaux attributs de l’élément form : 
• action="adresse_script_cibl...
Traitement d’un formulaire 
fichier uploadé 
 Pour joindre un fichier à un formulaire : 
• attribut enctype="multipart/fo...
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 inte...
Gestion d’une session 
exemple 
 Stockage d’une information dans une variable 
$total = 35000; // Montant d’une commande ...
Sommaire 
1) Traitement d’un formulaire 
2) Gestion d’une session 
3) Extension PDO 
a) Présentation 
b) Activation sous W...
L’extension PDO 
présentation 
• PDO (Php Data Object) est une classe PHP permettant à PHP 
de communiquer avec un serveur...
L’extension PDO 
activation sous Windows PHP 5.1.0 et plus 
1. Editer le fichier de config de php : php.ini 
2. Ajouter év...
L’extension PDO 
Connexion/Déconnexion 
• Connexion à l’aide du constructeur de la classe PDO qui reçoit : 
(string $dsn, ...
L’extension PDO 
Connexion/Déconnexion : exemple 
//Définition des paramètres de connexion 
define('USER','toto'); 
define...
L’extension PDO 
Gestion des erreurs 
• PDO admet trois comportements p/r aux erreurs : 
1. PDO::ERRMODE_SILENT (par défau...
L’extension PDO 
exécution des requêtes d’écriture 
int $objetPDO->exec(string $sql) 
• exec() exécute la requête (de type...
L’extension PDO 
exécution d’une requête de lecture 
PDOStatement $objetPDO->query(string $sql); 
• La méthode query() exé...
L’extension PDO 
Traitement d’un jeu d'enregistrements 
• La méthode PDOStatement::fetch() récupère une ligne depuis un 
j...
L’extension PDO 
exemple du traitement d’un jeu d'enregistrements 
Exemple (consultation sur la table membres(id_mbre, nom...
L’extension PDO 
Requêtes préparées 
• Une requête à exécuter de nombreuses fois dans un script, 
sera à chaque fois, anal...
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êt...
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êt...
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 ...
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 ...
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’aid...
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...
L’extension PDO 
Autres méthodes 
• Connaître l’ID du dernier enregistrement 
string PDO::lastInsertId ([ string $name = N...
Prochain SlideShare
Chargement dans…5
×

php2 : formulaire-session-PDO

1 196 vues

Publié le

Traitement d’un formulaire
Gestion d’une session
Extension PDO

Publié dans : Logiciels
  • Soyez le premier à commenter

php2 : formulaire-session-PDO

  1. 1. PHP avancé Abdoulaye DIENG Juin 2014
  2. 2. Sommaire 1) Traitement d’un formulaire a) Données renseignées b) Fichier uploadé 2) Gestion d’une session 3) Extension PDO
  3. 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. 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. 5. Sommaire 1) Traitement d’un formulaire 2) Gestion d’une session 3) Extension PDO
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×