PHP Programmation web avec PHP Personal Home Page
PHP Programmation web avec PHP (Personal Home Page) Olivier Le Cadet IUT Vélizy SRC 2 01/09/13 Olivier Le Cadet - IUT de Vélizy 1
Le HTML est un langage de marquage indiquant au navigateur comment doit afficher une page web. Il permet de mettre en forme des textes, d'afficher des images, de créer des tableaux etc. . . 01/09/13 Olivier Le Cadet - IUT de Vélizy 2
Code source de la page web <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN""http: //www. w 3. org/TR/html 4/loose. dtd"> <html> <head> <title>Le titre de la page web</title> </head> <body> Ceci est une <b>page web</b> avec des <big> mots </big> en gras, en <i>italique</i> et <table width="20%" border="1"> <tr> <td>un</td> <td>tableau</td> </tr> </table> </body> </html> 01/09/13 Olivier Le Cadet - IUT de Vélizy 3
Protocole http 01/09/13 Olivier Le Cadet - IUT de Vélizy 4
Rendre dynamique le html Oui, mais comment : Afficher l'heure actuelle Ne pas avoir à réécrire une page web dès qu'un fichier y est rajouté Traiter les formulaires Envoyer automatiquement des news quand une modification est faite Gérer une base de données Nombre de visiteurs etc. . . 01/09/13 Olivier Le Cadet - IUT de Vélizy 5
Une solution : le PHP + Langage de script interprété (pas compilé) Donc, portable (le même script marchera sur plusieurs plateformes) Simple à apprendre Librairies riches Open Source (gratuit) - Peu robuste : éviter pour les très gros projets! 01/09/13 Olivier Le Cadet - IUT de Vélizy 6
Historique du PHP 1994 : création de PHP par Rasmus Lerdorf (compter le nombre de visiteurs de son cv!). Même année : connexion à des bases de données rendue possible. 1995 : PHP 2 1998 : PHP 3 (prog. Orientée Objet). 2000 : PHP 4 2004 : PHP 5 (15 millions de pages web!) 01/09/13 Olivier Le Cadet - IUT de Vélizy 7
Un exemple : horloge. Page présente sur le serveur. <html> <head> <title>Horloge</title> </head> <body> <p> Nous sommes le <? php setlocale(LC_TIME, 'fr_FR'); echo strftime("%A %e %B %Y")? >. Il est <? php echo strftime("%H h %M") ? > </p> </body> </html> 01/09/13 Olivier Le Cadet - IUT de Vélizy 8
Page vue par le client Lorsqu'un client requiert la page précédente, le serveur traite les instructions php et les traduit en html. On obtient : <html> <head> <title>Horloge</title> </head> <body> <p> Nous sommes le mercredi 3 septembre 2008. Il est 21 h 13 </p> </body> </html> 01/09/13 Olivier Le Cadet - IUT de Vélizy 9
Ex 2: traitement des formulaires <form name="formulaire" method="POST"action="Resultat. Requete. php"> <table width="80%" border="0" cellspacing="0" cellpadding="0"> <tr> <td>Matière <select name="matiere[]" multiple> <option value="tout" selected>Tout</option> <option value="geometrie">Géométrie</option> </select> </td> <td>Niveau <select name="niveau[]" id="niveau" multiple> <option value="tout" selected>Tout</option> <option value="seconde">Seconde</option> </select> </td> </tr> <td><input type="submit" name="Submit" value="Envoyer"></td> </tr> </table> 01/09/13 Olivier Le Cadet - IUT de Vélizy 10
PHP à grands traits Inclus dans du html Code entre <? php et ? > Sensible à la casse : header() ≠ Header() Instructions terminées par ; Blocs d'instructions délimités par {. . . } Commentaires avec // en fin de ligne ou /*. . . */ Toujours se référer à la documentation officielle: http: //fr. php. net/manual/fr/ 01/09/13 Olivier Le Cadet - IUT de Vélizy 11
Premiers pas en PHP Les données 01/09/13 Olivier Le Cadet - IUT de Vélizy 12
Variables Préfixées par $ Déclaration : La déclaration n'est pas obligatoire Règles de nommage identiques à java. La variable est créée à la première utilisation (ex: $var = 1). Par défaut, elle vaut NULL Quelques fonctions utiles : isset() teste l'existence d'une variable unset() supprime une variable empty() teste si une variable est vide (0, "", etc. ) 01/09/13 Olivier Le Cadet - IUT de Vélizy 13
Constantes Définies grâce à define Ex : define('PI', 3. 14); On ne peut pas les modifier. define('CARRE', $a*$a) //ERREUR 01/09/13 Par convention, on les écrit en majuscules. Olivier Le Cadet - IUT de Vélizy 14
Types de données PHP est faiblement typé (typage implicite) PHP connaît en interne différents types : Entiers : -152 Flottants : 13. 2 Chaînes : " Ceci est une chaine " Booléens : TRUE, FALSE Tableaux Objets Fonctions utiles : get_type(), is_integer(), is_string(). . . 01/09/13 Olivier Le Cadet - IUT de Vélizy 15
Les nombres Opérateurs numériques : identiques à ceux du C et du java. Affectation : = Calcul : + - * / Combiné : += -= *= /= Modulo : % Comparaison : == < <= > >= != Incrémentation/décrémentation : ++ - Exemple : $a = 1; $a++; $a+=4; $a *= 2; 01/09/13 Olivier Le Cadet - IUT de Vélizy 16
Les chaînes de caractères Sans interpolation : ' . . . ' $a="Leduc"; // affichera : $t='Salut à toi M. $a'; // salut à toi M. $a Avec interpolation ". . . " $a="Leduc"; // affichera : $t="Salut à toi M. $a"; // salut à toi M. Leduc 01/09/13 Olivier Le Cadet - IUT de Vélizy 17
Les chaînes de caractères (string) Affichage : echo / printf() Exemple : echo "<p>La variable $a</p>"; Opérateur : Concaténation : . // $t = "Bonjour ". $a; Comparaison : == < <= >= !=, strcmp() Caractères spéciaux pour contrôler le flux affiché : n saut de ligne t tabulation ' " 01/09/13 Olivier Le Cadet - IUT de Vélizy 18
Tests et boucles PHP utilise la syntaxe du C (et du java) for ($i=0; $i<100; $i++){ if ($a>10){ . . . . . . } else{ switch($var){ . . . case 'a' : . . . } break; default: . . . break; while ($i<100){ }. . . } 01/09/13 Olivier Le Cadet - IUT de Vélizy 19
Exercices 1. Qu'affichent les instructions suivantes? $a=1; $b="2+$a"; $a=2; echo $b. $a; 2. Ecrivez un programme, qui en fonction de la valeur d'une variable $jour (entier compris entre 1 et 7) affiche le jour de la semaine. 3. Faites afficher la table de multiplication par 7. 01/09/13 Olivier Le Cadet - IUT de Vélizy 20
Attention aux comparaisons! Pour comparer deux variables de types différents, PHP effectue des conversions implicites. if (3=="3") echo "1n"; if (0=="") echo "2n"; if ("FALSE"==TRUE) echo "3n"; Pour interdire les conversions lors d'une comparaison il faut utiliser les opérateurs === et !== if (3==="3") echo "1n"; //FALSE if (0==="") echo "2n"; //FALSE if ("FALSE"===TRUE) echo "3n"; //FALSE 01/09/13 Olivier Le Cadet - IUT de Vélizy 21
Les fonctions 01/09/13 Olivier Le Cadet - IUT de Vélizy 22
Les fonctions Syntaxe similaire au C (et java), sans le typage Définition d'une fonction : function factoriel($n){ } . . . return $res; Appel d'une fonction : $nombre= fact(4); Les variables définies à l'extérieur de la fonction n'y sont pas connues (sauf var. globales). Récursivité possible. En sortie, les paramètres passés à la fonction sont inchangés (passage par valeur). Mais on peut passer les paramètres par référence (&): Function puissance(&$nombre, &$indice){. . . } 01/09/13 Olivier Le Cadet - IUT de Vélizy 23
Exemples et exercices Ecrivez la fonction qui calcule le carré d'un nombre. Qu'affiche le programme ci-dessous? Et si l'on rajoute un & devant chacun des paramètres? function puissance($nombre, $indice){ $resultat=$nombre; for ($x=$indice; $x>0; $x--){ $resultat = $resultat * $nombre; } $nombre=$resultat; return $nombre; } $nombre=2; $indice=5; echo $nombre. " puissance ". $indice. " vaut ". puissance($nombre, $indice). " "; 01/09/13 Olivier Le Cadet - IUT de Vélizy 24
Variables globales On peut déclarer des variables qui seront connues dans tout le script, y compris dans le champ de définition des fonctions : global $var=3; function test($n){ return $n+$var; } 01/09/13 A éviter autant que possible!! Olivier Le Cadet - IUT de Vélizy 25
Les tableaux 01/09/13 Olivier Le Cadet - IUT de Vélizy 26
Les tableaux Un tableau est une collection ordonnée de couples clé/valeur. La clé peut être de type entier ou de type chaîne de caractères (tableaux associatifs) Déclarations : $fruits=array(); Affectations : $fruits[0]="pommes"; $fruits[1]= "poires"; $fruits[]="oranges"; Déclaration+affectation : $fruits=array("pommes", "poires", "oranges"); Quelques fonctions utiles sur les tableaux : sizeof(), sort(), count(), in_array(). . . 01/09/13 Olivier Le Cadet - IUT de Vélizy 27
Les tableaux associatifs Déclaration : $calories=array(); Affectations : $calories["pommes"]=300; $calories["bananes"]=500; Affectation + déclaration : $calories=array("pommes"=>300, "bananes"=>500); Exemple : $tab["nom"]="Le Cadet"; echo $tab["nom"]; 01/09/13 Olivier Le Cadet - IUT de Vélizy 28
Parcours de tableau Pour un tableau numérique, méthode classique: for ($i=0; $i<count($tab); $i++){ echo "$tab[$i]n"; } Pour un tableau associatif : foreach ($tableau as $indice => $valeur){ echo "$indice : $valeurn"; } 01/09/13 Olivier Le Cadet - IUT de Vélizy 29
Tableaux multidimensionnels On peut créer des tableaux de tableaux (voir TDs) => tableaux multidimensionnels. Pour parcourir de tels tableaux, il faut en général imbriquer plusieurs boucles foreach Exemple : $couleurs=array("vives"=>array("rouge"=>"FF 0000", "vert"=>"00 FF 00", "bleu"=>"0000 FF"), "douces" => array("rose"=>"FE 9 ABC", "jaune"=>"FDF 189")); 01/09/13 Olivier Le Cadet - IUT de Vélizy 30
Exercice (tableau) Créez un tableau qui associe à la France, à l'Allemagne, et à l'Angleterre leurs capitales (Paris, Berlin, Londres), puis faites écrire une phrase qui recense les villes présentes dans le tableau et affiche leurs capitales ("la capitale de la France est Paris", etc…) 01/09/13 Olivier Le Cadet - IUT de Vélizy 31
Compléments sur les tableaux On peut parcourir un tableau à l'aide d'un pointeur grâce aux fonctions current(), next(), prev() key($tab) renvoie l'indice courant de $tab. Exo : écrire une fonction qui affiche le contenu d'un tableau grâce à current() et next() shuffle() mélange aléatoirement les val. d'un tableau Un tableau peut être géré comme une pile (fonction array_push() et array_pop() ). array_push($pile, "un", "deux", "trois"); 01/09/13 Olivier Le Cadet - IUT de Vélizy 32
Compléments sur les chaînes de caractère. Expressions régulières. $chaine{$i} -> ième (en commençant à 0. . ) caractère de la chaîne strlen($chaine) -> longueur de la chaîne strtolower(), strtoupper() -> met en minuscule, majuscule substr($chaine, $debut, $n) -> extrait $n caractères de $chaine ereg() -> Teste des expressions régulières. Exemple : ^[a-z|. |-]+@[a-z|. |-]+. (org|com|net|fr)$ désigne toutes les adresses mails composées d’un mot en lettres en minuscules avec éventuellement des. Et des -, suivies du caractère @, suivi d’un nouveau mot composé de minuscule, de. Et de tirets. Le mail doit se terminer par. org, . com, . net, ou. fr. Ainsi, ereg("^[a-z|. |-]+@[a-z|. |-]+. (org|com|net|fr)$ « , $courrier) va tester si la chaîne de caractère $courrier suit bien le patron indiqué en premier argument. ereg_replace($expr_reg, $nouvelle_chaine, $texte) 01/09/13 Olivier Le Cadet - IUT de Vélizy 33
Les Formulaires 01/09/13 Olivier Le Cadet - IUT de Vélizy 34
Formulaire HTML Balise <form>. Attributs obligatoires method et action. Peut être composé de (INPUT type=…): 01/09/13 Texte (text) Cases à cocher (checkbox) Bouton d'envoi, reset (submit, reset) Password (password) Bouton radio (radio) Ou de liste de sélection (SELECT name=), zone de texte (textarea) Olivier Le Cadet - IUT de Vélizy 35
Traitement d'un formulaire grâce à PHP Exemple 1 <form action="http: //localhost/formulaire. php method="GET"> <p> <input type="text" name="login" value="" /> <button type="submit" name="form" value="1">OK</button> </p> </form> Poster ce formulaire se traduira par un accès à la page http: //localhost/formulaire. php? login="Jean"&form=1 01/09/13 Accéder à ces infos en php : $_GET["login"] Olivier Le Cadet - IUT de Vélizy 36
Variables super-globales Les valeurs saisies sont enregistrées dans un tableau associatif $_GET (ou $_POST pour la méthode POST). Ce sont des variables super-globales (toujours accessibles). Méthode POST plus sure : les variables n'apparaissent pas en clair dans la barre d'adresse… Le tableau $_REQUEST est la fusion de $_GET et $_POST. Afficher le login entré par l'utilisateur, dans l'exemple précédent : <? php if (isset($_GET["login"]) echo "<br />Bonjour, ". $_GET["login"]. " !n"; ? > 01/09/13 Il existe d'autres variables super-globales : $_FILES (tableau pour les fichiers envoyés), $_SERVER (info diverses sur le serveur), $_COOKIE et $_SESSION (voir plus loin). Ce sont des tableaux. Olivier Le Cadet - IUT de Vélizy 37
Traitement des valeurs multiples 01/09/13 Certains champs autorisent la saisie de plusieurs valeurs sous le même nom (checkbox, listes à choix multiple). Il faut récupérer les infos sous forme de tableau. Exemple 2 Olivier Le Cadet - IUT de Vélizy 38
Formulaire html de l'exemple 2 <form name="formulaire" method="POST" action="Resultat. Requete. php"> <table width="80%" border="0" cellspacing="0" cellpadding="0"> <tr> <td></td> <td>Niveau <select name="niveau[]" id="niveau" multiple> <option value="tout" selected>Tout</option> <option value="terminale">Terminale</option> <option value="universite">Université</option> </select> </td> <td></td><td>N'afficher que les pdf <input name="format[]" type="checkbox" value="pdf"> tex <input name="format[]" type="checkbox" value="tex"> doc <input name="format[]" type="checkbox" value="doc"> </td> <td><input type="submit" name="Submit" value="Envoyer"></td> </tr> </table> 01/09/13 Olivier Le Cadet - IUT de Vélizy 39
Traitement des données multiples $_POST["niveau"] et $_POST["format"] sont eux-mêmes des tableaux. Les valeurs qu'ils contiennent peuvent être récupérées à l'aide d'un foreach, par exemple. foreach ($_POST["niveau"] as $indice=>$valeur){ … } Exercices : 01/09/13 en parcourant le tableau $_POST["format"] de l'exemple précédent, faites afficher les formats demandés par l'utilisateur. Ecrire un formulaire d'authentification avec mot de passe caché. Olivier Le Cadet - IUT de Vélizy 40
Les fichiers 01/09/13 Olivier Le Cadet - IUT de Vélizy 41
Ouvrir/fermer/lire/écrire un fichier Ouvrir en lecture: fopen() $fp=fopen("fichier. txt", "r"); Ouvrir en écriture: $fp=fopen("fichier. txt", "w"); Lire : fread(), fgets() $ligne=fgets($fp, 256); Fin de fichier : feof() while (!feof($fp)){…}; Ecrire : fwrite() fwrite($fp, "Bonjour"); Fermer : fclose() fclose($fp); Copier : copy() Effacer : unlink() unlink("un. txt"); Renommer : rename() rename("un. txt", "deux. txt"); file_exists() if (file_exists("un. txt")){…} Dossiers : opendir(), readdir(), closedir(), is_dir() … 01/09/13 copy("un. txt", "deux. txt"); Olivier Le Cadet - IUT de Vélizy 42
Charger des fichiers Charger sur le serveur : <HTML><BODY> <form action="charger. php" method="POST" enctype="multipart/form-data"> Introduire le fichier : <input type="file" name="fichier"><br /> <input type="hidden" name="taille_max" value=1000> <input type="submit"> </BODY></HTML> Télécharger : <? php $fichier="ex. zip"; $mime. Type="application/zip"; header("content-disposition: attachment; filename="ex. zip"); header("content-type: ". $mime. Type); header("content-length: ". filesize($fichier)); readfile($fichier); ? > 01/09/13 Olivier Le Cadet - IUT de Vélizy 43
Exercices sur les fichier 01/09/13 Faites un script qui affiche à l'écran le contenu d'un fichier texte. txt, ligne par ligne (fgets()). Soit un tableau $peinture dont chaque élément est un tableau comprenant un champ oeuvre contenant le nom d'une œuvre et un champ artiste qui contient le nom de l'artiste qui l'a réalisé. Créez un fichier peinture. txt qui à chaque ligne contient un doublon œuvre-artiste du tableau $peinture. Olivier Le Cadet - IUT de Vélizy 44
Fonctions diverses : include, date, … 01/09/13 Olivier Le Cadet - IUT de Vélizy 45
Inclusion de fichiers, die 01/09/13 include("fichier. php") : le contenu de ce fichier est inséré ici. (ex : include("en_tete. inc")). include_once() : le fichier est inclus s'il ne l'a pas encore été. require() : en cas d'absence du fichier, arrêter tout sur une erreur. require_once() : fusion des deux précédents. die("message") : stoppe l'exécution du script avec le message d'erreur indiqué. Olivier Le Cadet - IUT de Vélizy 46
Mail, date Exemple simple pour le mail : $message="Bonjourn Au revoir"; mail('destinataire@velizy. fr', 'Sujet', $message); Dates (cf manuel) : 01/09/13 date($format, $dateheure) : formate une date/heure (par défaut, maintenant) strftime($format, $dateheure) : idem, localisé. Précéder d'un setlocale(LC_TIME, "fr_FR"); Olivier Le Cadet - IUT de Vélizy 47
PHP et les bases de données (My. SQL) 01/09/13 Olivier Le Cadet - IUT de Vélizy 48
Généralités Intérêt des bases de données : Stocker les données persistantes de l'application (ex : gestion de CDs). Facilité de traitement de ces données Principe de fonctionnement : 01/09/13 Le script PHP ouvre une connexion à un serveur My. SQL ou Postgre. SQL. Le script exécute une ou plusieurs requêtes. Les résultats de la requête sont reçus ligne par ligne dans des tableaux PHP. La connexion My. SQL se ferme à la fin du script PHP. Olivier Le Cadet - IUT de Vélizy 49
Connexion mysqli_connect($serveur, $user, $pass, $db) $dbhost = 'venus'; $dbuser = 'olecadet'; $dbpass = ''; //Pas de mot de passe ici $db='olecadet'; $id_conn = mysqli_connect($dbhost, $dbuser, $dbpass, $db); // Pour vérifier si cela a marché : if (mysqli_connect_errno($id_conn)){ echo "erreur de connexion : ". mysqli_connect_error(); } Fermeture avec mysqli_close($link); mysqli_close($id_conn); 01/09/13 Olivier Le Cadet - IUT de Vélizy 50
Envoyer une requête mysqli_query($id_conn, $requete) $requete="SELECT titre FROM Cds WHERE auteur="$auteur" "; $resultat=mysqli_query($id_conn, $requete); Lire le résultat de la requête : ligne par ligne avec mysqli_fetch_assoc($resultat) Nom d'une colonne de la table Cds while ($ligne=mysqli_fetch_array($resultat)){ $titre=$ligne["titre"]; //etc… } 01/09/13 mysqli_fetch_array() permet d'avoir des indices numériques (0, 1, 2. . ) plutôt que des chaînes de caractère (''titre''). Olivier Le Cadet - IUT de Vélizy 51
Requêtes SQL : révisions. 01/09/13 Olivier Le Cadet - IUT de Vélizy 52
Généralités • Données regroupées dans des tables, chaque élément représenté sur une ligne. • Chaque objet caractérisé par des attributs, ou champs (colonnes) • Ex : Acheteurs – Produits – Chariots. id_user nom compte 1 Marc 701 2 Jean 202 3 Pierre 803 id_achat id_user id_produit nom prix 1 1 2 1 souris 6 2 1 1 2 ordi 1000 3 3 livre 20 01/09/13 Olivier Le Cadet - IUT de Vélizy 53
Généralités 01/09/13 Les colonnes sont typées : Numérique (BOOLEAN, INT, DOUBLE, …) Texte (VARCHAR(taille), TEXT, …) Date/Heure (DATE, TIMESTAMP) Outil web pour gérer la base : php. My. Admin Gestion des utilisateurs, permissions, Création de bases de données, Visualisation et recherche, Requêtes. Olivier Le Cadet - IUT de Vélizy 54
La requête SELECT Renvoie une "table" : résultats en lignes/colonnes SELECT expression FROM matable WHERE condition; * : tout Exemples : SELECT * FROM Acheteurs; SELECT nom FROM Produits WHERE id_produit=1; Exo : faites une requête pour extraire les noms de tous les produits de la table Produits dont le prix est > 18 euros. 01/09/13 Olivier Le Cadet - IUT de Vélizy 55
Compléments sur SELECT ORDER BY : trier les résultats LIMIT : limiter le nombre de résultats. DISTINCT : supprimer tout doublon dans les résultats (SELECT DISTINCT …) LIKE : chaînes contenant un motif donné : 01/09/13 SELECT * FROM Produits ORDER BY nom ASC; SELECT id_user from Acheteurs WHERE nom LIKE 'J %'; SELECT count(*) FROM Produits -> pour compter le nombre de résultats. Olivier Le Cadet - IUT de Vélizy 56
Jointures (JOIN) • But : interroger plusieurs tables à la fois. – SELECT * FROM Acheteurs JOIN Chariots WHERE Acheteurs. id_user = Chariots. id_user; • Autre exemple : SELECT * from Joueurs; nom Federer id_pays 1 Nadal 2 Ferrer 2 01/09/13 SELECT * from Pays JOIN Joueurs WHERE Pays. id_pays=Joueurs. id_pays; SELECT * from Pays; id_pays 1 Suisse 2 Espagne 3 France Olivier Le Cadet - IUT de Vélizy id_pays nom 1 Suisse Federer 2 Espagne Nadal 2 Espagne Ferrer 57
INSERT Insérer une ligne dans une table 2 syntaxes : 01/09/13 INSERT INTO Joueurs (id_pays, nom) VALUES (3, 'Gasquet'); INSERT INTO Joueurs SET nom='Gasquet', id_pays=3; Si un champ n'a pas de valeur, s'il est en AUTOINCREMENT il vaudra 1 de plus que le précédent, sinon valeur par défaut (NULL souvent) Olivier Le Cadet - IUT de Vélizy 58
UPDATE, DELETE UPDATE : mettre à jour une ligne dans une table DELETE : supprimer une ligne (attention…) 01/09/13 UPDATE Joueurs SET nom='Tsonga' WHERE id_pays=3; DELETE FROM Joueurs WHERE nom LIKE 'Fe%'; On peut créer une table avec CREATE. Olivier Le Cadet - IUT de Vélizy 59
Sessions et cookies 01/09/13 Olivier Le Cadet - IUT de Vélizy 60
Garder des valeurs d'une page à l'autre 01/09/13 Pour passer des valeurs d'une page à l'autre, la méthode POST est sure, mais il faut utiliser à chaque fois un formulaire. Solution : les sessions, les cookies. Les cookies sont de petits fichiers conservés du côté client (ordi du visiteur). Ils permettent de conserver par exemple ses préférences. Une session est un fichier conservé sur le serveur et accessible par les scripts en fonction d'un identifiant généré à sa création. Olivier Le Cadet - IUT de Vélizy 61
Les cookies et leurs limites Créer un cookie : setcookie($var, $valeur, . . ) Effacer un cookie : setcookie($var, . . ) (pas de valeur). Cookies écrits sur le disque du visiteur : permissions limitées voire interdites suivant les paramètres du navigateur. Pas plus de 20 cookies sur un même poste client. Taille d'un cookie limitée. 01/09/13 Olivier Le Cadet - IUT de Vélizy 62
Mécanisme des sessions 01/09/13 Ouverture d'une session dans chaque page de l'application avec session_start(). A placer tout au début des pages. Stockage des variables de session dans le tableau super-global $_SESSION. Lecture des variables de la session possible dans les différentes pages de l'appli à l'aide du tableau $_SESSION. Fermeture de la session : session_destroy() Olivier Le Cadet - IUT de Vélizy 63
Exemple élémentaire page 1. php <? php session_start(); $_SESSION['nom']='Paul'; echo "<a href="page 2. php">Vers la page 2</a>"; ? > page 2. php <? php session_start(); echo "<br />Bonjour, ". $_SESSION['nom']. "!"; ? > 01/09/13 Olivier Le Cadet - IUT de Vélizy 64
programmation objet en PHP 01/09/13 Olivier Le Cadet - IUT de Vélizy 65
Définition de classes (class) Syntaxe et principes similaires à java. Définition de classe : class page_web{ private $titre; //attribut function set. Titre($titre){ //méthode set. Titre $this->titre=$titre; } function get. Titre($titre){ //méthode get. Titre return $this->titre; } function __construct($titre){ //constructeur $this->set. Titre($titre); } } 01/09/13 Olivier Le Cadet - IUT de Vélizy 66
Instances de classe Créer une instance de classe : new() $ma_page=new page_web("nouvelle page"); 01/09/13 C'est la fonction constructeur (__construct, avec deux _) qui est appelée lors de la création d'une instance de classe. private, public, protected gèrent la visibilité des méthodes et attributs (public par défaut). Olivier Le Cadet - IUT de Vélizy 67
Héritage Mot clef extends : class felin extends animal Pas d'héritage multiple La classe fille hérite des méthodes de la classe mère (mais ne peut utiliser ses méthodes private), et peut en redéfinir. class page_formulaire extends page_web{ function début. Formulaire($action){ echo "<form action="$action">"; } function fin. Formulaire(){ echo "</form>"; } } 01/09/13 $formulaire = new page_formulaire("formulaire"); Olivier Le Cadet - IUT de Vélizy 68
Quelques fonctions utiles get_class() get_parent_class() class_exists() is_subclass_of() method_exists() get_class_method() 01/09/13 Olivier Le Cadet - IUT de Vélizy 69
Gestion de bases de données en objet Exo Complétez la classe suivante : Class Serveur_Base_Donnees{ private $serveur; private $user; private $pass; private $bd; private $link; private $resultat; function __construct($serveur, $user, $pass, $bd){. . . } function connexion_bd(){. . . // Ouvre la connexion; selectionne la bd$bd; } function interroger($requete){. . . // Envoie la requete $requete } function extraire_un_resultat(){. . . // Retourne une ligne de résultat } } 01/09/13 Olivier Le Cadet - IUT de Vélizy 70
Gestion de bases de données: la classe PDO (PHP Data Objects) Alternative commode à mysqli // Création d'une instance de PDO pour gérer les accès à la BDD $dns='mysql: host=venus; dbname=pdurand'; $connection = new PDO($dns, 'pdurand', 'plop'); // Envoi de la requête. set. Fetch. Mode() sert ici à décider que le résultat sera // utilisé comme un objet $selection = $connection->query("SELECT * FROM Cds"); $select->set. Fetch. Mode(PDO: : FETCH_OBJ); //on récupère dans $selection les titres et les auteurs et on les affiche while( $disque = $selection->fetch() ) { // Affichage d'un des champs echo "titre : ". $disque->titre. " , auteur : ". $disque->auteur; }
PDO : caractéristiques Orienté objet Permet d'utiliser des requêtes préparées : $req_prep = $connection->prepare("SELECT * FROM Membres WHERE id= ? AND name = ? "); Lorsque l'on voudra utiliser la requête préparée on utilisera la méthode execute $req_prep->execute(array(1, 'Dupont')) ; Recupération d'erreurs avec try{. . } catch{. . } try{ $connexion = new PDO(. . . , . . . ) ; } catch(Exception $e) { echo 'Erreur : '. $e->get. Message(). '<br />' ; }
Fin! Beaucoup d'autres possibilités avec php : 01/09/13 Lecture et écriture de fichiers XML (->RSS) Génération de graphique, manipulation d'images (créer des miniatures, …) Gestion des erreurs (classe Exception, throw, try. . catch) Connexion ftp Création de fichiers pdf (librairie FPDF). Olivier Le Cadet - IUT de Vélizy 73
Bibliographie PHP 5, el lenguaje para los profesionales de la Web, Luis Miguel Cabezas Granado (Anaya) PHP 5 avancé, Eric Daspet, Cyril Pierre de Geyer (Eyrolle). www. php. net http: //php. developpez. com/cours/ 01/09/13 Merci à François Gannaz (Silecs), à Vanessa Vitse, et à Henri-Pierre Charles (IUT vélizy). Olivier Le Cadet - IUT de Vélizy 74
- Slides: 74