Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf ·...

44
1 P H P P H P Olivier LOSSON École Marocaine des Sciences de l'Ingénieur (EMSI) Master Maintenance et Production (MP)

Transcript of Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf ·...

Page 1: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

1

P H PP H P

Olivier LOSSON

École Marocaine des Sciences de l'Ingénieur (EMSI) Master Maintenance et Production (MP)

Page 2: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

2

Introduction (1)Introduction (1)

Architecture client/serveur

Page 3: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

3

Interprétation d'unepage HTML

client

serveur web

Requête (URL)

Envoi de la page HTML

Interprétation et affichage de la page par le navigateur

Introduction (2)Introduction (2)

Page 4: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

4

Interprétation d'unepage PHP

clientserveur web

Requête (URL)

Envoi de la page HTML

Interprétation et affichage de la page par le navigateur

Interprétation

Interpréteur PHP

Page HTML aveccode PHP intégré

Page HTML complétée du résultat de

l’exécution du code PHP

Base dedonnées

Introduction (2)Introduction (2)

Page 5: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

5

Introduction (3)Introduction (3)

Principe de PHP langage interprété exécuté côté serveur

Atouts gratuit, performant, open source création de pages web dynamiques script inclus au sein d'une page HTML interfaçage avec BDs

MySQL Oracle

intégration à plusieurs serveurs web (Apache, IIS, …) extensions et fonctions (>2000) très documentées

dBase … (ODBC) Informix

requête

résultat

www.domaine.fr/page.php

interpréteur

page.phprequête

résultat

www.domaine.fr/page.php

interpréteur

page.php

page (HTML)

Page 6: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

6

Introduction (4)Introduction (4)

Codage 1 seul fichier ".php" = code HTML + code PHP inclusion dans le code HTML par les balises

<?php…

?> Exécution par le serveur

lecture du fichier PHP rencontre de "<?php" ⇒ passage en mode PHP exécution de chaque instruction par l'interpréteur transmission du résultat au client (code HTML pur)

Le script PHP n’est jamais visible par l’utilisateur

Page 7: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

7

Code PHP<html><head><title>Exemple simple</title></head><body><?phpprint "Bonjour tout le monde";

?></body></html>

Début desection PHP

Fin desection PHP

Fin d'instruction

Introduction (5) : ex. simpleIntroduction (5) : ex. simple

Page 8: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

8

Introduction (5) : ex. simpleIntroduction (5) : ex. simple

Code HTML résultant de l’interprétation<html><head><title>Exemple simple</title></head><body>Bonjour tout le monde</body></html>

Page 9: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

9

I. BasesI. Bases

1. Syntaxe Commentaires

// sur une ligne /* sur plusieurs

lignes */ Expressions terminées par un ; Variables

Noms– introduits par un $– commencent par _ ou une lettre– sensibles à la casse

Déclaration : aucune, seult. initialisation (typage faible) Conversions de type automatiques : $age=18+ "2";

Page 10: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

10

I. BasesI. Bases

2. Opérateurs affectation = comparaison

égalité = = identité (même type) = = = inégalité > , < , <= , >= différence != logiques && , | | , !

arithmétiques + , - , * , / , % concaténation . (point)

Exemple : print "Age : ".$age." ans" ;

Page 11: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

11

I. BasesI. Bases

3. Production de code source HTML production (affichage) de texte brut

print "Bonjour tout le monde"; production de code HTML (texte+balises)

print "<b>Bonjour</b> tout le monde"; code HTML : <b>Bonjour</b> tout le monde page web : Bonjour tout le monde

print "<i>Salut</i><br>&agrave;\ntous"; code HTML : <i>Salut</i><br>&agrave;

tous page web : Salut

à tous

Page 12: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

12

I. BasesI. Bases

3. Production de code source HTML (2) affichage d'une variable

instruction print ou echo (nombres et chaînes)$ch = "Bonjour tout le monde";print $ch;

fonction print_r (toutes variables, dont tableaux)$tab = array(3,2,1);print_r ($tab); code HTML : Array

( [0] => 3 [1] => 2 [2] => 1)

page web :Array ( [0] => 3 [1] => 2 [2] => 1 )

Page 13: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

13

I. BasesI. Bases

3. Production de code source HTML (3) Guillemets simples ou doubles ?

simples : pas d'interprétation des variables internes (VI) doubles : interprétation des VI et séquences d'échappement

Exemples

code PHP code HTML page web$age = ٢٣;$nom = 'toto'; //ou : $nom="toto";

mon nom est toto mon nom est toto mon nom est $nom mon nom est $nom mon nom est toto mon nom est toto mon nom est <b>toto</b> mon nom est <b>$nom</b>

print "mon nom est $nom";print 'mon nom est $nom';print 'mon nom est '.$nom;print "mon nom est <b>$nom</b>"; mon nom est totoprint 'mon nom est <b>$nom</b>'; mon nom est $nom

Page 14: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

14

I. BasesI. Bases

3. Production de code source HTML (4) Échappement

Nécessité d'échapper certains caractères :Exemple : print "<a href=\"page.php\">";

Le caractère \ affiche tel quel celui qui suit Exceptions : séquences ayant une signification particulièr

\t = tabulation\n = retour à la ligne (DANS LE SOURCE HTML)

Exemplecode PHP code HTML page web

$age = ٢٣;$nom = 'toto'; //ou : $nom="toto"; print "Je m'appelle\n \"$nom\" <br>et j'ai ".$age.' ans';

je m'appelle "toto" <br>et j'ai 23 ans

je m'appelle "toto" et j'ai 23 ans

Page 15: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

15

I. Bases -I. Bases - Structures de contrôle (1) Structures de contrôle (1)

Structures de contrôle testsif (condition1) {

instructions1}elseif (condition2) {

instructions2}...else {

instructionsN}

sélectionswitch (variable) {

case valeur1:instructions1break;

case valeur2:instructions2break;

...default:

instructionsbreak;

}

Page 16: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

16

I. Bases -I. Bases - Structures de contrôle (2) Structures de contrôle (2)

Boucles for

for(<initialisations>;<test continuer tq>;<faire a chaque tour>) {

instructions} ex. for ($i=1; $i<6; $i++){

echo "$i<br>";}

whilewhile (condition) {

instructions}

do {instructions

} while (condition)

Page 17: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

17

PHP - Tableaux (1)PHP - Tableaux (1)

Généralités types de tableaux

tableau " numérique" (index num., à partir de 0) tableau associatif (hash array) (associations clé=>valeur)

principe : pointeur interne repérant l'élément courantTableau numérique Tableau associatif

décl

arat

ion

(opt

ionn

elle

)

$nomTab = array(elt١,elt٢,…); $nomTab = array(cle١=>elt١,cle٢=>elt٢,…);

affe

ctat

ion

$nomTab[٠] = "pomme";$nomTab=("pomme","banane");

$nomTab["fruit١"] = "pomme";$nomTab=("fruit٢"=>"banane","fruit١"=>"pomme");

ajou

t élt

$nomTab[] = "orange"; $nomTab["fruit٣"] = "orange";

Page 18: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

18

PHP - Tableaux (2)PHP - Tableaux (2)

Accès et parcours accès dans "…" : print "Salut {$tab['clef']}"; créer tab à partir de variables : list($var1, $var2,…) retourner élément courant et pointer sur suivant : each()

retourne FALSE si pointeur au-delà de la fin du tableau parcourir

tableau numériquewhile (list(, $value) = each($arr)) {//ou: foreach ($arr as $value){ echo "Valeur : $value<br>\n";}

tableau associatifwhile (list($key,$value) = each($arr)) { //ou: foreach ($arr as $key => $value){ echo "Clé : $key; Valeur : $value<br>\n";}

Page 19: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

19

PHP - Tableaux (3)PHP - Tableaux (3)

Fonctions nb éléments : sizeof() ou count() élément courant : index : key() , valeur : current() déplacer le pointeur : reset() , end() , next() , prev() trier : sort() , rsort() , usort() scinder chaîne en tableau : explode() , split() fusionner tableau en chaîne : implode() alias join()

et aussi … retrouver clé, valeur : array_key_exists() , array_search() ensembles des clés, valeurs : array_keys() , array_values() différence de tableaux : array_diff() , array_diff_assoc() intersection : array_intersect() , array_intersect_assoc() fusionner, inverser : array_merge() , array_reverse()

Page 20: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

20

PHP - Fonctions (1)PHP - Fonctions (1)

Principe pas de différence fonction/procédure à déclarer avant utilisation (pas de prototypes) 0..n paramètresfunction nom_fonc($arg1, ... ) {instructions}

retour d'un résultatreturn $resultat;

appel[$retour = ] nom_fonc ($valArg1, ... );

Page 21: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

21

PHP - Fonctions (2)PHP - Fonctions (2)

Paramètres portée des variables

paramètres : visibles que dans la fonction utilisation d'une variable globaleglobal $varGlobale //déclaration dans fonction

optionnels (en fin de liste): donner une valeur par défaut, qui peut être scalaire, tableau ou NULL function myfunc( $param1="inconnu", $param2="" ) {

echo "param1=$param1 param2=$param2\n"; }

myfunc("toto", "titi");myfunc("toto");myfunc();

Page 22: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

22

PHP - Fonctions (3)PHP - Fonctions (3)

Passage de paramètres par valeur (défaut) par référence (=par adresse) : ajouter un & au param.

dans les paramètres transmis à l'appel pr un passage ponctuel dans l'en-tête (déclaration) pour un passage systématique

function my_func( &$chaine ) {$chaine.=', etc.";

}$str = 'bla bla';my_func($str);echo $str;//'bla bla, etc.'

function my_func( $chaine ) {$chaine.=', etc.";

}$str = 'bla bla';my_func($str);echo $str; //'bla bla'my_func(&$str);echo $str; //'bla bla, etc.'

Page 23: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

23

PHP - Traitement des erreursPHP - Traitement des erreurs

Gestionnaire d'erreur standard dès l'erreur, PHP envoie le message (script, ligne, …)

au navigateur sans tenir compte du code HTML en cours de sortie

Gestion d'erreur personnalisée But

Ne pas exposer l'utilisateur à des messages d'erreur Les msgs PHP/MySQL peuvent renseigner un pirate

Implantation simple @ devant un nom de f° évite les messages d'erreur PHP die() alias exit() termine le script et affiche son arg. Utilisation : @nom_fonc(…) or die("message si err");

Page 24: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

24

PHP et pages web dynamiques (1)PHP et pages web dynamiques (1)

Interfaçage avec formulaire HTML Principe

nommer les éléments du formulaire donnée lue dans $_POST[] ou $_GET[], selon la méthode utilisée

Illustration form.html

<FORM action='traiter.php' method='POST'> Pr&eacute;nom <INPUT name='prenom' type='text'> <INPUT type='submit'></FORM>

Page 25: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

25

PHP et pages web dynamiques (1)PHP et pages web dynamiques (1)

Interfaçage avec formulaire HTML Principe

nommer les éléments du formulaire donnée lue dans $_POST[] ou $_GET[], selon la méthode utilisée

Illustration form.html

<FORM action='traiter.php' method='POST'> Pr&eacute;nom <INPUT name='prenom' type='text'> <INPUT type='submit'></FORM>

traiter.php<?php print_r($_POST);?>

Olivier|Array ( [prenom] => Olivier )

Page 26: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

26

PHP et pages web dynamiques (1)PHP et pages web dynamiques (1)

Interfaçage avec formulaire HTML Principe

nommer les éléments du formulaire donnée lue dans $_POST[] ou $_GET[], selon la méthode utilisée

Illustration form.html

<FORM action='traiter.php' method='GET'> Pr&eacute;nom <INPUT name='prenom' type='text'> <INPUT type='submit'></FORM>

traiter.php<?php print_r($_GET);?>

Array ( [prenom] => Olivier )

Les données de formulaire figurent dans l'URL

Page 27: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

29

PHP - Interfaçage avec un SGBD (1)PHP - Interfaçage avec un SGBD (1)

Principales étapes (ex. de mySQL)

se connecter au serveur de la BD :mysql_connect($host, $user,$password)

choisir la base : mysql_selectdb($bdd) exprimer une requête : $id_rq=mysql_query($ch_req) lire une ligne du résultat (pour une requête sélection) : mysql_fetch_row($id_rq) ou mysql_fetch_object($id_rq)

se déconnecter : mysql_close()

Page 28: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

30

PHP - Interfaçage avec un SGBD (2)PHP - Interfaçage avec un SGBD (2)

Exemple<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//FR"><html><head><title>Promotion</title></head><body><table border="1" cellpadding="0" cellspacing="0"><tr><th>Nom</th><th>Adresse mail</th></tr><?php

//Paramètres de connexion$host="localhost"; //machine hébergeant le SGBD$user="lo"; //votre login$password="cmoi"; //mot de passe$bdd="etudiants"; //nom de la basemysql_connect($host, $user,$password) or

die("erreur de connexion au serveur");mysql_selectdb($bdd) or

die("erreur de connexion à la base");

Page 29: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

31

PHP - Interfaçage avec un SGBD (3)PHP - Interfaçage avec un SGBD (3)

// Création et envoi de la requête$ch_req ="SELECT nom,mail FROM Promo ORDER BY nom";$result = mysql_query($ch_req);// Récupération des résultatswhile($ligne = mysql_fetch_row($result)){

$nom=$ligne[0];$mail=$ligne[1];print "<tr>\n<td>";print "<a href=\"$mail\">$nom</a>";print "</td>\n<td>$mail</td>\n</tr>\n";

}// Déconnexion de la base de donnéesmysql_close();

?></tr></table></body></html>

Page 30: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

29

Sessions (1)Sessions (1)

Utilité Transmettre des variables de page en page (ex. login) Conserver des informations le temps d'une visite

Mécanisme Session = fichier sur le serveur Accessible de tous les scripts

Caractérisée par un identifiant généré à la création de la session une période de validité limitée

maximale détruite à la fermeture du navigateur du client

Page 31: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

30

Sessions (2)Sessions (2)

Tableau et fonctions $_SESSION

tableau associatif global contenant toutes les variables de session pour la sessions courante (clés = noms)

session_start() démarre une session ou en rappelle une existante doit être appelée dans tous les scripts, avant tout écho

session_destroy() détruit une session (mais pas les variables associées) destruction explicite des variables (ex. deconnexion.php)$_SESSION = array();

Page 32: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

31

Conseils (1)Conseils (1)

PHP et HTML De HTML à PHP

Former le code HTML souhaité (mentalement ou par écrit) Identifier les parties statiques (HTML) / dynamiques (PHP) Dans les parties dynamiques, identifier

– les boucles– l'utilisation de données issues de formulaires/de BD

Section PHP ou HTML ? PHP pour les parties dynamiques et statiques limitées HTML pour les parties statiques étendues Éviter une alternance trop fréquente HTML/PHP, donc les

sections PHP très courtes

Page 33: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

32

Conseils (2)Conseils (2)

Optimiser le code Utiliser au maximum les fonctions intégrées. Ex.:

print '<tr>';foreach ($tab as $value){

print '<td>'.$value.'</td>';}print '</tr>';peut être remplacé parprint '<tr><td>'.join('</td><td>',$tab).'</td></tr>';

Créer du code générique Écriture de pages paramétrées Écriture de fonctions paramétrées Création de bibliothèques de fonctions Création de scripts

Page 34: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

33

Conseils (3)Conseils (3)

Erreurs courantes Erreurs de syntaxe

Message : Parse error: syntax error, unexpected <TYPE> on line <L>Sol.: point-virgule manquant à la fin de la ligne L-1

Message : Parse error: syntax error, unexpected <CAR> in ...Sol.: oubli du $ introduisant les noms de variables

Message : Parse error: syntax error, unexpected $end on line <L>Sol.: chaîne/bloc non refermé (bien avant la fin de section PHP en L)

Erreurs MySQL Message : Warning: mysql_fetch_row(): supplied argument is not a

valid MySQL result ressource in ... on line <L>Pb.: requête incorrecte dans le mysql_query($ch_req) précédant L.Sol.: 1) print($ch_req);

2) tester et corriger la requête $ch_req sous phpMyAdminou: if ($res==FALSE) print mysql_error();

Page 35: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

34

Conseils (4)Conseils (4)

Erreurs courantes (suite) Autres

dans tests : = au lieu de ==, oubli des parenthèses dans boucles do ou while : oubli d'incrémentation de la variable testée

Niveau de rapport d'erreurs Niveaux : E_ERROR, E_WARNING, E_PARSE, E_NOTICE Fixer

dans php.ini : error_reporting=E_ALL ou =E_ALL & ~E_NOTICE à l'exécution (dans script) : error_reporting(<niveau>)

Conseillés en développement (débogage) : E_ALL ou E_ALL & ~E_NOTICE en production (en ligne) : - dans php.ini : display_errors FALSE

- dans le script : error_reporting(0)

Page 36: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

35

RéférencesRéférences

Manuels en ligne : http://www.php.net/manual/fr/ compilés : http://fr3.php.net/download-docs.php

Tutoriels http://fr.wikibooks.org/wiki/Programmation_PHP http://www.phpfrance.com/tutoriaux/index.php/toc/home http://www.toutestfacile.com

Cours en ligne http://www.cdprof.com/formation/formation_php.php http://www.grappa.univ-lille3.fr/polys/php/ http://thierrylhomme.developpez.com/php/ultra_php/ http://www.laltruiste.com/coursphp/sommaire.html http://php.developpez.com/cours/

Page 37: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

36

Compléments (1)Compléments (1)

Tests sur variables test : variable définie ? isset($var) désallocation unset($var) connaître le typegettype(), is_array(), is_int(), is_float()

Conversions de type automatiques, en fonction de la valeur de la variable manuelles

fonction settype() casting : (string) (int) (real) (array)

Page 38: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

37

Compléments (2)Compléments (2)

Fonctions de protection de chaînes addslashes()

Échappe les caractères ( ' , " , \ , NUL) qui doivent l'être pour être utilisés dans une requête de base de données

Fonction inverse : stripslahes() Rem. si la directive magic_quotes_gpc est à on dans

php.ini, la fonction addlslashes() est appliquée sur toutes les données GET, POST, COOKIE

htmlspecialchars() Convertit les caractères spéciaux HTML ( & , " , ' , < , > )

en leur entité HTML (&amp; , &quot; , &#039; , &lt; , &gt ) htmlentities() traduit en entité HTML tous les caractères

ayant un équivalent. Inverse : html_entity_decode()

Page 39: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

38

Compléments (3)Compléments (3)

Dates et heures Timestamp UNIX

nb secondes écoulées depuis le 01/01/1970 00:00:00 GMT générer un timestamp : time(), mktime()ou strtotime()

Fonctions de dates/heures ajout de périodes : strtotime() formatage : date() ou strftime() test de validité de date : checkdate() retour d’un tableau associatif (clés)

– getdate (seconds, minutes, hours, mday, wday, mon, year, yday, weekday, month)

– gettimeofday (sec,usec, minuteswest, dsttime)

Page 40: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

39

Compléments (4)Compléments (4)

Variables prédéfinies (tableaux superglobaux) $_SERVER

['SERVER_NAME']=nom du serveur exécutant le script ['DOCUMENT_ROOT']=chemin du rép racine du serveur ['PHP_SELF']=nom complet du script courant ['REMOTE_ADDR']=adresse IP du client ['HTTP_USER_AGENT']=navigateur du client

$GLOBALS=variables globales déclarées $_POST, $_GET=valeurs saisies par formulaire $_SESSION=valeurs des variables de session

Page 41: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

40

Compléments (5)Compléments (5)

Constantes déclaration : define("nom_const","valeur") utilisation : echo "nom_const vaut ".nom_const;

Constantes prédéfinies (extrait) __FILE__ : chemin complet de la page en cours __LINE__ : n° de ligne en cours d'exécution

Page 42: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

41

Compléments (6)Compléments (6)

Configuration (php.ini) paramètre register_globals à off par sécurité

évite de définir les variables GET et POST comme globales ⇒$id non définie dans http://www.ex.com/test.php?id=3

paramètre track_vars à on récupère les variables dans les tableaux associatifs (variables superglobales) $_GET[] ⊂ données envoyées par méthode GET (params) $_POST[] ⊂ données envoyées par méthode POST

Page 43: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

42

PHP - Traitement avancé des erreurs (1)PHP - Traitement avancé des erreurs (1)

Niveaux d'erreurs Constantes prédéfinies

E_ERROR : Fatale (stoppe le script), rapportée par défaut E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR = erreurs du noyau, à gérer de la même façon que E_ERROR

E_PARSE : erreur de syntaxe, fatale, rapportée par défaut E_WARNING : non fatale mais assez sérieuse, rapportée

Ex. passage de paramètres de types incorrects à une fonction E_NOTICE : non fatale, non rapportée par défaut mais à

rapporter en phase de développementEx. référence à une variable non définie

E_ALL : regroupe tous les types d'erreurs Fixer le niveau de rapport d'erreur

– directive (php.ini): error_reporting=E_ALL ou =E_ALL & ~E_NOTICE– à l'exécution (dans script) : error_reporting()

Page 44: Cours de PHP - univ-lille.frlagis-vi.univ-lille1.fr/~lo/ens/ancien/emsi_mp/php_cours.pdf · Sessions (1) Utilité Transmettre des variables de page en page (ex. login) Conserver des

43

PHP - Traitement avancé des erreurs (2)PHP - Traitement avancé des erreurs (2)

Gestion d'erreur personnalisée (suite) utilité : messages d'erreurs standards par types d'err. set_error_handler(<nom_fonc>)

spécifie une f° utilisateur comme gestionnaire d'erreurs. retourne un ptr sur l'ancien gestionnaire (FALSE si aucun)

restore_error_handler() réactive l'ancien gestionnaire écrire un gestionnaire d'erreurs

function monGE ($errno, $errstr[, $errfile[,$errline[,$context]]]) {…} $old_error_handler=set_error_handler("monGE");

Erreurs MySQL sous PHP mysql_errno() : n° de dernière erreur MySQL mysql_error() : texte de la dernière erreur MySQL