08:04:07
Programmation Web 2016-2017 1
2
08:04:07
Programmation Web 2016-2017
3
08:04:07
Programmation Web 2016-2017
Réseau
Serveur
Serveur Web
MySQL
Module PHP
.html
.php
.jpg
Client
Navigateur
•HTML
•JavaScript
•CSS
<?php
echo <<<HTML
<html>
<head>
<title>Hello</title>
</head>
<body>Hello world</body>
</html>
HTML;
GET /hello.php HTTP/1.0
Exécution d’un programme sur le serveur
Construction de la réponse
<html>
<head>
<title>Hello</title>
</head>
<body>Hello world</body>
</html>
Protocole HTTP
hello.php
Connexion sur le serveur (port 80)
Requête HTTP du client (hello.php)
Localisation de la ressource
Localisation du code PHP dans le fichier
Exécution du code PHP
Envoi du résultat au client
= réponse HTTP
Fermeture de la connexion
Rendu graphique des données
4
08:04:07
Programmation Web 2016-2017
Réseau
Client Serveur
Demande de ressource
Traitement de la demande
La ressource est « .php »
Transfert de la demande
au module PHP
Exécution du script PHP
sur le serveur
Construction de la
réponse
Analyse de la réponse
Rendu graphique de la
réponse
Réponse produite
5
08:04:07
Programmation Web 2016-2017
6
08:04:07
Programmation Web 2016-2017
7
08:04:07
Programmation Web 2016-2017
Typage faible de PHP :
Aucune information
Typage faible de PHP :
Aucune information
Typage faible de PHP :
Aucune information
8
08:04:07
Programmation Web 2016-2017
$a = 12
$b = 210
permutation...
$a = 12
$b = 210
Permutation impossible :
Passage des arguments
des fonctions par valeur
9
08:04:07
Programmation Web 2016-2017
Bonjour cher inconnu
Bonjour cher Marcel
10
08:04:07
Programmation Web 2016-2017
11
08:04:07
Programmation Web 2016-2017
Fichier mafonction.php
<?
function mafonction($arg)
{
…
}
Fichier utilisation1.php
…
require("mafonction.php")
mafonction(true) ;
…
Fichier utilisation2.php
…
include("mafonction.php")
…
$var=false ;
mafonction($var) ;
…
Fichier utilisation3.php
…
require("mafonction.php")
…
Problème avec include :
produit un warning
le script continue
Problème avec require :
produit un fatal error
le script s’arrête
12
08:04:07
Programmation Web 2016-2017
13
08:04:07
Programmation Web 2016-2017
Gestion des erreurs – (Mauvais) Exemple
<html>
<head>
<title>die-exit</title>
</head>
<body>
<?php
if (!isset($val)) {
die($html."problème val") ;
/* Au delà de ce point,
fin du script */
}?>
Choix: $val
</body>
</html>
<html>
<head>
<title>die-exit</title>
</head>
<body>
problème val
PHP HTML
Navigateur
problème val
HTML non valide…
14
08:04:07
Programmation Web 2016-2017
php.ini
Constante
E_ERROR
E_WARNING
E_PARSE
E_NOTICE
E_CORE_ERROR
E_CORE_WARNING
E_COMPILE_ERROR
E_COMPILE_WARNING
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
E_ALL
E_STRICT
Ancien niveau d'erreur
Sur un serveur en production,
toute erreur affichée donne
des indices sur les scripts et
rend le site vulnérable
display_errors boolean
Débogage
15
08:04:07
Programmation Web 2016-2017
Warning: file(dummy.txt): failed to open stream: No
such file or directory in dummy.php on line 68
Problème de lecture
Problème de lecture
$v = @file("dummy.txt")
or die("Problème de lecture") ;
Fichier absent
16
08:04:07
Programmation Web 2016-2017
17
08:04:07
Programmation Web 2016-2017
18
08:04:07
Programmation Web 2016-2017
Moteur de recherche
Fonctions de la même extension
Fonction courante
Descriptif Prototype
Liste et description
des paramètres
Valeur de retour
Version de PHP
Notes utiles
À voir aussi
19
08:04:07
Programmation Web 2016-2017
Nom de la fonction
Paramètres
« Type » de retour « Type » de $pattern
Paramètre optionnel
types
pseudo-types
pseudo-variable
08:04:07
Programmation Web 2016-2017 20
21
08:04:07
Programmation Web 2016-2017
22
08:04:07
Programmation Web 2016-2017
Nom du driver Bases de données supportées
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird/Interbase 6
PDO_IBM IBM DB2
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.x/5.x
PDO_OCI Oracle Call Interface
PDO_ODBC ODBC v3 (IBM DB2, unixODBC et win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 et SQLite 2
PDO_4D 4D
23
08:04:07
Programmation Web 2016-2017
24
08:04:07
Programmation Web 2016-2017
08:04:07
Programmation Web 2016-2017
Serveur
BD
Serveur
Web
Requête HTTP
1
Connexion BD
3
Réponse HTTP
6
Affichage résultat
7
Script PHP
2
Requête BD
4
Mon PC
BD
Résultat BD
5
25
26
08:04:07
Programmation Web 2016-2017
27
08:04:07
Programmation Web 2016-2017
28
08:04:07
Programmation Web 2016-2017
29
08:04:07
Programmation Web 2016-2017
30
08:04:07
Programmation Web 2016-2017
31
08:04:07
Programmation Web 2016-2017
32
08:04:07
Programmation Web 2016-2017
33
08:04:07
Programmation Web 2016-2017
34
08:04:07
Programmation Web 2016-2017
ERREUR !!
array(3) {
[0]=> string(5) "42000"
[1]=> int(1064)
[2]=> string(47) "Erreur de syntaxe près de 'COUCOU' à la ligne 1"
}
Code SQLSTATE
Code erreur spécifique
du driver
Chaîne erreur spécifique
au driver
35
08:04:07
Programmation Web 2016-2017
36
08:04:07
Programmation Web 2016-2017
Requête
Résultat de requête
37
08:04:07
Programmation Web 2016-2017
38
08:04:07
Programmation Web 2016-2017
+--------+------------------------------------+
| mor_id | mor_nom |
+--------+------------------------------------+
| 872 | With A Little Help From My Friends |
| 873 | The Letter |
| 874 | Marjorine |
| 875 | Midnight Rider |
| 876 | You Are So Beautiful |
| 877 | Feelin' Allright |
| 878 | Cry Me A River |
...
SELECT *
FROM morceau
ORDER BY mor_id
Résultat de requête
Curseur interne
39
08:04:07
Programmation Web 2016-2017
40
08:04:07
Programmation Web 2016-2017
41
08:04:07
Programmation Web 2016-2017
42
08:04:07
Programmation Web 2016-2017
43
08:04:07
Programmation Web 2016-2017
44
08:04:07
Programmation Web 2016-2017
45
08:04:07
Programmation Web 2016-2017
46
08:04:07
Programmation Web 2016-2017
47
08:04:07
Programmation Web 2016-2017
48
08:04:08
Programmation Web 2016-2017
Préparation de la requête
Association d'une valeur au 1er paramètre
Exécution de la requête
Association d'une valeur au 1er paramètre
Exécution de la requête
paramètre anonyme
49
08:04:08
Programmation Web 2016-2017
Préparation de la requête
Association d'une valeur au paramètre nommé
Exécution de la requête
Association d'une valeur au paramètre nommé
Exécution de la requête
paramètre nommé
50
08:04:08
Programmation Web 2016-2017
Préparation de la requête
Association d'une valeur au 1er paramètre
Exécution de la requête
Association d'une valeur au 1er paramètre
Exécution de la requête
paramètre anonyme
51
08:04:08
Programmation Web 2016-2017
Préparation de la requête
Association d'une valeur au paramètre nommé
Exécution de la requête
Association d'une valeur au paramètre nommé
Exécution de la requête
paramètre nommé
52
08:04:08
Programmation Web 2016-2017
53
08:04:08
Programmation Web 2016-2017
54
08:04:08
Programmation Web 2016-2017
55
08:04:08
Programmation Web 2016-2017
56
08:04:08
Programmation Web 2016-2017
Requête:
SELECT *
FROM membre
WHERE login='whatever'
AND passwd='who_cares?'
Désolé...
57
08:04:08
Programmation Web 2016-2017
Requête:
SELECT *
FROM membre
WHERE login='whatever'
AND passwd='who_cares?' OR true!=''
Bienvenue John
58
08:04:08
Programmation Web 2016-2017
59
08:04:08
Programmation Web 2016-2017
Requête:
SELECT *
FROM membre
WHERE login='whatever'
AND passwd='who_cares?' OR true!=''
Désolé...

CM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdf