Académique Documents
Professionnel Documents
Culture Documents
Programmation Web
http://eric.univ-lyon2.fr/jdarmont/?page_id=445
L3 MIASHS
Année 2019-2020
Jérôme Darmont http://eric.univ-lyon2.fr/jdarmont/?feed=rss2
https://twitter.com/darmont_lyon2 #webmiashs
http://eric.univ-lyon2.fr/jdarmont/
2 Programmation web Programmation web
1 2
3 4
Tâches Langage
Présentation CSS
5 6
1
Principe de séparation du code Des versions qui coexistent (1/2)
HTML 5
Pourquoi ? HTML 1 XHTML 1.0
HTML 4 en XML
XHTML 5
– Maintenance facilitée HTML 2 Évolution de HTML 4
Code plus lisible HTML+ Non XHTML 1.1
La modification d’une tâche n’affecte pas les autres HTML3 standards
– Réutilisation de code
1990 1995 1997 2000 2001 2003 2008
Comment ?
HTML 3.2
– Architecture MVC XHTML 2
HTML 4
– Gabarits (templates) Standards W3C
Évolution de XHTML 1
Abandonnée en 2009
7 8
1995 1997 1998 2000 2004 2015 Par les concepteurs de PHP
– PHP Standards Recommendations (PSR)
PHP 3 PHP 7 – La majorité des bibliothèques devient objet
PHP Hypertext Processor Performance
Rasmus Lerdorf
9 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 10 Programmation web http://eric.univ-lyon2.fr/jdarmont/
9 10
Interface PHP-bases de données Page web avec script Serveur Web Client
11 12
2
Syntaxe de base Variables et types
13 14
Scalaires ou associatifs
Possibilité de mélanger indices scalaires et associatifs
– Création par assignation des valeurs
– Ex. $tscalaire[0] = "Chaîne 0"; // Indiçage à partir de 0
$tscalaire[1] = "Chaîne 1"; – Ex. $matrice[0][0] = 2;
$tassociatif["Dupont"] = 30; $mscalassoc["Dupont"][0] = 30;
15 16
17 18
3
Opérateurs de chaînes Opérateurs logiques
19 20
21 22
23 24
4
Sélection par cas (1/2) Sélection par cas (2/2)
switch($ch) {
switch(variable) {cas} case "a":
echo "A";
– Ex. switch($i) { $ch = "A";
case 0: break;
echo "i = 0"; case "b":
break; echo "B";
$ch = "B";
case 1: break;
echo "i = 1"; case "c":
break; echo "C";
$ch = "C";
case 2: break;
echo "i = 2";
break; default: echo "Ni \"a\" ni \"b\" ni \"c\"";
} }
25 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 26 Programmation web http://eric.univ-lyon2.fr/jdarmont/
25 26
27 28
29 30
5
Inclusion de fichiers externes Sessions
Fonction require() : Provoque une erreur fatale si le Objectif : Stockage de variables lors de la navigation
fichier requis manque (interruption du script) sur plusieurs pages web successives
Fonction include() : Provoque seulement un
avertissement (warning) si le fichier requis manque
Évaluation des fichiers inclus en mode HTML Utilisations courantes :
– Identification des visiteurs d'un site par login et mot de passe
Aide à séparer le code PHP et HTML stockés dans une base de données
Exemples (paramètre des fonctions : une URL) – Gestion du profil des utilisateurs
– require("biblio.class.php"); – …
– include("une_page_web.html");
– include('http://serveur.fr/pg.html');
31 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 32 Programmation web http://eric.univ-lyon2.fr/jdarmont/
31 32
33 34
35 36
6
Exemple de session (3/5) Exemple de session (4/5)
<?php <?php
// session1.php // session2.php
session_start(); session_start();
require("session-entete.inc.html"); require("session-entete.inc.html");
require("session.inc.php"); require("session.inc.php");
// Action // Action
$_SESSION["nom"] = "Aitarab"; unset($_SESSION["prenom"]);
$_SESSION["prenom"] = "Sofiane"; ?>
?>
<a href="session3.php">Page suivante</a>
<a href="session2.php">Page suivante</a>
<?php
<?php require("session-pied.inc.html");
require("session-pied.inc.html"); ?>
?>
37 38
39 40
objet objet
41 42
7
objet objet
43 44
objet
45 46
objet objet
// Méthodes
public function afficherNom() {
echo $this->nom; // $this est l’objet courant
}
public function changerPrix($nouveau_prix) {
$this->prix = $nouveau_prix;
cdn57.androidauthority.net
}
}
47 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 48 ?> Programmation web http://eric.univ-lyon2.fr/jdarmont/
47 48
8
objet objet
Instanciation Constructeur
49 50
objet objet
51 52
objet objet
// Instanciation
cabanon = new Cabane("Ma cabane au Canada");
53 54
9
objet
55 56
57 58
59 60
10
Généralités Michael Widenius
Bases de données, requêtes
Principe : imbrication de requêtes SQL dans PHP Base de données : ensemble de tables
+ formulaires HTML pour les mises à jour
Table : ensemble d'attributs et leurs valeurs
SGBD utilisé : MariaDB
– Ex. ETUDIANT (numetu, nom, prenom, datenaiss, note)
– SGBD relationnel multi-utilisateurs rapide et open-source
– 1995 : MySQL AB (v1-v5.0)
– 2008 : rachat de MySQL AB par Sun Microsystems (v5.1) Interrogation simple
– 2010 : rachat de Sun Microsystems par Oracle (v5.5-v8.0) SELECT listeAttributs FROM table
– 2010 : MariaDB fork libre de MySQL (v5.2-v10.3) WHERE condition
Désormais utilisé dans de nombreuses distributions Linux – Ex. SELECT nom, prenom FROM etudiant WHERE note >= 10
61 62
63 64
65 66
11
PDO
67 68
PDO PDO
Connexion
$pdo = new PDO(idServeurBD, login, motDePasse); Préparation de la requête
– idServeurBD = pilote:host=serveur;dbname=nomBD $res = $pdo->prepare(requêteSQL)
– Ex. – Ex. $res = $c->prepare("select nom, prenom from etudiant");
$c = new PDO("mysql:host=localhost;dbname=darmont", "darmont", "x");
Exécution de la requête
Gestion des erreurs – Ex. $res->execute();
try { instructions } catch () { traitementDesErreurs }
– Ex. try { Accès au résultat de la requête (ligne par ligne)
// Connexion – Ex. foreach($res as $ligne)
} catch (PDOException $erreur) {
echo $erreur->getMessage() ; echo $ligne["nom"] . " " . $ligne["prenom"];
}
69 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 70 Programmation web http://eric.univ-lyon2.fr/jdarmont/
69 70
PDO PDO
71 72
12
PDO PDO
// 1re insertion
// Exemple avec paramètres nommés $id = 800;
$res = $c->prepare("insert into ETUDIANT $nom = "Bentayeb";
values (:id, :nom, :prenom, NULL, NULL, NULL)"); $prenom = "Fadila";
$res->execute();
// Liaison des paramètres
$res->bindParam(":id", $id); // 2e insertion
$res->bindParam(":nom", $nom); $id = 810;
$res->bindParam(":prenom", $prenom); $nom = "Harbi";
$prenom = "Nouria";
$res->execute();
73 74
PDO
75 76
Différence entre les méthodes get et post Saisie dans un formulaire : <input />
– Attribut obligatoire : name, nom de la variable
– get : apparition des valeurs saisies en paramètres de l'URL de
la page action Champ texte : <input type="text" size="" />
– post : . valeurs saisies cachées – Ex. <input type="text" name="nom" size="30" />
. quantité de données possible plus importante
Suggestion de valeurs : <datalist>…</datalist>
Exemple
<form action="ajout_etu.php" method="post">…</form> – Ex. <datalist id="prop_noms">
<option value="Dupond">
Structure d'un formulaire : ensemble de zones de <option value="Durand">
saisie (groupes de champs) <option value="Martin">
Groupe de champs : <fieldset> </fieldset> </datalist>
<input type="text" name="nom" list="prop_noms" />
77 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 78 Programmation web http://eric.univ-lyon2.fr/jdarmont/
77 78
13
Champs (2/5) Champs (3/5)
Vérification syntaxique : expressions régulières Bouton radio : <input type="radio" value="" />
– Ex. <input type="email" pattern="[^ @]*@[^ @]*" /> – Ex.
Homme : <input type="radio" name="genre" value="H" />
Champ mot de passe : <input type="password" /> Femme : <input type="radio" name="genre" value="F" />
– Ex. <input type="password" name="passwd" size="8" />
Case à cocher : <input type="checkbox" />
Champ caché : <input type="hidden" value="" />
– Ex.
– Ex. <input type="hidden" name="numetu" value="10" />
choix 1 : <input type="checkbox" name="choix1" />
choix 2 : <input type ="checkbox" name="choix2" />
Fichier : <input type="file" />
– Ex. <input type="file" name="Fichier_téléchargé" />
79 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 80 Programmation web http://eric.univ-lyon2.fr/jdarmont/
79 80
81 82
83 84
14
PDO
Exploitation des données d'un formulaire Mise à jour d'une base de données
Dans la page cible (Ex. ajout_etu.php) <?php // Suite de l'exemple : document ajout_etu.php
– Tableaux associatifs $_GET[ ] et $_POST[ ] $c = new PDO("mysql:host=localhost;dbname=darmont",
– Permettent d'accéder aux valeurs transmises par les
méthodes get et post des formulaires, respectivement "darmont", "x");
85 86
87 88
Trygve Reenskaug
1978
Objectifs du cours
Bases de PHP Calcul
PHP objet
Interface PHP-bases de données
Architecture MVC et gabarits
Affichage
Annexes
– Langage HTML5
– Feuilles de style CSS3
openclassrooms.com
89 90
15
Modèle Vue
91 92
93 94
<body> </table>
<table> </body>
<caption>Liste des matières</caption> </html>
<tr> <th>codemat</th> <th>libelle</th> <th>coef</th> </tr>
95 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 96 Programmation web http://eric.univ-lyon2.fr/jdarmont/
95 96
16
Découpage : modèle Découpage : vue (1/2)
<?php // modele-o.inc.php
class Modele {
private $idc; <!DOCTYPE html>
private function connexion() { <!-- vue.inc.php -->
require("connect.inc.php");
$this->idc = new PDO("mysql:host=$host; <html lang="fr">
dbname=$dbname", $login, $password);
} <head>
public function lireMatieres() { <meta charset="utf-8" />
$this->connexion(); <title>Exemple d'application MVC</title>
$res = $this->idc->prepare("SELECT * FROM matiere"); <link rel="stylesheet" href="tableau.css" />
$res->execute; </head>
return $res;
}
}
97 ?> Programmation web http://eric.univ-lyon2.fr/jdarmont/ 98 Programmation web http://eric.univ-lyon2.fr/jdarmont/
97 98
<body>
<table>
<caption>Liste des matières</caption>
<?php // controleur-o.php
<tr> <th>codemat</th> <th>libelle</th> <th>coef</th> </tr>
<?php foreach ($res as $ligne) { ?>
<tr> require("modele-o.inc.php");
<td><?php echo $ligne["codemat"] ?></td> $mod = new Modele();
<td><?php echo $ligne["libelle"] ?></td>
<td><?php echo $ligne["coef"] ?></td> $res = $mod->lireMatieres();
</tr>
<?php } ?> require("vue.inc.php");
</table> ?>
</body>
</html>
99 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 100 Programmation web http://eric.univ-lyon2.fr/jdarmont/
99 100
TEMPLATE TEMPLATE
Objectifs :
– Encore séparation du code PHP et HTML <table> <!-- gab1.tpl.html -->
<caption>Variables simples</caption>
– Partage de gabarits entre plusieurs applications web
<tr>
<th>Nom</th>
<th>Prénom</th>
</tr>
<tr>
<td>{nom}</td>
<td>{prenom}</td>
</tr>
</table>
phpcodeur.net
101 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 102 Programmation web http://eric.univ-lyon2.fr/jdarmont/
101 102
17
TEMPLATE TEMPLATE
103 104
TEMPLATE TEMPLATE
require("template.class.php");
<table> <!-- gab3.tpl.html -->
// Lecture des données
<caption>Blocs imbriqués</caption>
$res = $c->prepare("select nom, prenom from etudiant");
$res->execute(); <!-- BEGIN etu -->
<tr>
// Mise en œuvre du gabarit <!-- BEGIN attribut -->
$gab2 = new Template("./"); <td>{etu.attribut.valeur}</td>
$gab2->set_filenames(array("body2" => "gab2.tpl.html")); <!-- END attribut -->
foreach($res as $ligne) </tr>
$gab2->assign_block_vars("etu", <!-- END etu -->
array( “nom" => $ligne["nom"],
</table>
“prenom" => $ligne["prenom"] ));
$gab2->pparse('body2');
105 106
TEMPLATE TEMPLATE
Mise en œuvre de blocs imbriqués Gabarit dans l’application MVC exemple (1/4)
<?php // modele-og.inc.php
require("template.class.php"); class Modele {
// Lecture des données private $idc;
private function connexion() {
$res = $c->prepare("select * from etudiant"); // Comme dans mode-o.inc.php
$res->execute(); }
$data = $res->fetchAll(PDO::FETCH_ASSOC); public function lireMatieres() {
// Comme dans mode-o.inc.php
// Mise en œuvre du gabarit }
$gab3 = new Template("./"); public function afficherMatieres($data) {
$gab = new Template("./");
$gab3->set_filenames(array("body3" => "gab3.tpl.html")); $gab->set_filenames(array("body" => "vue.tpl.html"));
foreach($data as $ligne) { foreach($data as $ligne)
$gab3->assign_block_vars("etu", array("rien" => "")); // Boucle sur les <tr> $gab->assign_block_vars("matiere",
foreach ($ligne as $val) array( "codemat" => $ligne["codemat"],
"libelle" => $ligne["libelle"],
$gab3->assign_block_vars("etu.attribut", array("valeur" => $val)); "coef" => $ligne["coef"] ));
} $gab->pparse('body');
$gab3->pparse('body3'); }
}
107 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 108 ?> Programmation web http://eric.univ-lyon2.fr/jdarmont/
107 108
18
TEMPLATE TEMPLATE
Gabarit dans l’application MVC exemple (2/4) Gabarit dans l’application MVC exemple (3/4)
<!DOCTYPE html>
<html lang="fr"> <!-- vue.tpl.html (vue et gabarit) -->
<!-- BEGIN matiere -->
<head>
<tr>
<meta charset="utf-8" />
<td>{matiere.codemat}</td>
<title>Exemple d'application MVC</title>
<td>{matiere.libelle}</td>
<link rel="stylesheet" href="tableau.css" />
<td>{matiere.coef}</td>
</head>
</tr>
<body>
<!-- END matiere -->
<table>
</table>
<caption>Liste des matières</caption>
</body>
<tr> <th>codemat</th> <th>libelle</th> <th>coef</th> </tr>
</html>
109 110
TEMPLATE
Objectifs du cours
<?php // controleur-og.php Bases de PHP
require("template.inc.php");
require("modele-og.inc.php");
PHP objet
Interface PHP-bases de données
$mod = new Modele();
$res = $mod->lireMatieres(); Architecture MVC et gabarits
$mod->afficherMatieres($res); Annexes
?>
– Langage HTML5
– Feuilles de style CSS3
111 112
HTML : HyperText Markup Language Éviter la "balkanisation du Web" des années 1990
– Liens hypertextes Interopérabilité et portabilité (tablettes, téléphones
– Langage à base de balises mobiles…)
Objectif : publier sur le Web des documents formatés Accessibilité aux personnes handicapées
Réduction des coûts de développement
Développé par Tim Berners-Lee au CERN (Suisse)
Exploitation de la technologie XML (vers le Web
Standardisé par le World Wide Web Consortium (W3C) sémantique / Web 3.0)
– Exemple : moteurs de recherche (personnalisation, suggestions,
résumé d’informations…)
113 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 114 Programmation web http://eric.univ-lyon2.fr/jdarmont/
113 114
19
Pourquoi des standards ? (1/2) Éléments, balises et attributs
Contrôle qualité (validation des pages Web) Élément : nom, notion abstraite
– Ex. Document HTML : html
Réduction considérable du volume des documents
Balise : forme concrète d'un élément
Référencement efficace dans les moteurs de – Ex. de balise ouvrante : <html>
recherche – Ex. de balise fermante : </html>
115 116
117 118
Note : Une balise vide peut se noter <balise></balise> <!-- Titre -->
ou <balise />, au choix. <title>Exemple de page HTML</title>
</head>
119 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 120 Programmation web http://eric.univ-lyon2.fr/jdarmont/
119 120
20
Optimisation des performances Corps du document
121 122
123 124
125 126
21
Imbrication des balises Liens hypertextes
127 128
Ancres Images
129 130
Multimédia Figures
Sons : élément <audio> </audio> Élément de structuration (comme section, article…)
Vidéos : élément <video> </video> Balises : <figure> </figure>
Attributs communs Légende : <figcaption> </figcaption>
– src : URL du contenu Exemple :
– controls : affiche les contrôles du lecteur multimédia <figure>
– autoplay : démarrage dès que possible <img src="tim-berners-lee.jpg" alt="Photo Tim BL" />
– loop : en boucle <video src="test.ogg" controls="controls" muted="muted">
Le format .ogg n'est pas supporté.
– muted : sans son
</video>
<audio src="chord.wav" controls="controls">
Exemple
Le format .wav n'est pas supporté.
<audio src="test.mp3" controls="controls" loop="loop"> </audio>
Le format MP3 n’est pas supporté par votre navigateur. <figcaption>Tout le multimédia de HTML5</figcaption>
131 </audio> 132 </figure>
Programmation Web http://eric.univ-lyon2.fr/jdarmont/ Programmation Web http://eric.univ-lyon2.fr/jdarmont/
Programmation web
131 132
22
Jauges Listes ordonnées et non-ordonnées
133 134
Exemple Exemple
<dl>
<dt>1er terme</dt>
<dd>Définition du 1er terme</dd> <ul>
<dt>2ème terme</dt> <li>Elément non ordonné 1
<dd>Définition du 2ème terme</dd> <ol>
</dl> <li>Sous-élément ordonné 1.1</li>
<li>Sous-élément ordonné 1.2</li>
</ol>
Résultat à l'affichage </li>
1er terme <li>Elément non ordonné 2</li>
Définition du 1er terme </ul>
2ème terme
Définition du 2ème terme
135 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 136 Programmation web http://eric.univ-lyon2.fr/jdarmont/
135 136
137 138
23
Apparence du tableau exemple Tableaux à cellules recouvrantes (1/2)
Mes totaux
C1 C2 L1
Jour de la semaine Montant Total
Lundi 456 euros 456 euros L12
Mardi 200 euros 656 euros
C12 L2
139 140
"Fusion" de cellules (<td> ou <th>) 26,4 % de la population française souffre d'une entrave
dans une activité quotidienne et 10 % est affectée d'un
Cellule sur plusieurs colonnes : attribut colspan handicap. (SVM, novembre 2008)
– Ex. <table> <tr> <td>C1</td> <td>C2</td> </tr>
<tr> <td colspan="2">C12</td> </tr> </table> Préceptes d’accessibilité :
141 142
143 144
24
Définition et caractéristiques Avantages
Cascading Style Sheets (CSS) : Gestion simplifiée et globale de la présentation d'un site
Feuilles de style en cascade
Coûts de développement et de maintenance allégés
Première spécification par le W3C en 1996 (code plus simple)
Séparation du contenu et de la présentation
Code source allégé
Définition de styles génériques pour les éléments
Possibilité de présentations différentes selon le profil
Syntaxe différente de HTML utilisateur, la résolution écran…
Possibilité de validation automatique Meilleure accessibilité
145 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 146 Programmation web http://eric.univ-lyon2.fr/jdarmont/
145 146
Trois localisations possibles (+local au +global) Imbrication des définitions : la plus locale l'emporte.
– Ex. Définition de style dans un fichier externe vs. définition
Dans un élément HTML : attribut style
dans un élément
– Ex. <p style="color: blue; text-align: center;">…</p> la définition locale de l’élément prévaut
147 148
149 150
25
Écriture d'une feuille de style Sélecteurs
151 152
153 154
155 156
26
Propriétés de typographie Propriétés de texte
157 158
159 160
Hyperliens
Listes non-ordonnées
– Ex. a { color: blue; }
– list-style list-style: disc;
Hyperliens visités list-style: circle;
list-style: square;
– Ex. a:visited { color: purple; }
– list-style-image list-style-image: url("URL");
Hyperliens survolés (avec le pointeur de souris)
– Ex. a:hover { color: white; background-color: blue; } Listes ordonnées
– list-style list-style: decimal;
Hyperliens activés list-style: upper-roman;
– Ex. a:active { color: purple; } list-style: lower-alpha;
161 162
27
Propriétés de tableau Positionnement flottant (1/4)
163 164
165 166
167 168
28
Positionnement absolu (2/2) Exemple de mise en page : Objectif
169 170
<main> *{ nav {
font-family: arial; float: left;
<header> width: 200px;
}
<h1>Exemple de mise en page</h1> body { background-color: red;
</header> background-color: silver; padding: 1em;
} border-radius: 15px;
<div id="conteneur">
main { }
<nav> section {
width: 1000px;
<a href="http://www.univ-lyon2.fr">Université Lyon 2</a> margin-left: auto; float: left;
</nav> margin-right: auto; width: 750px;
background-color: white; background-color: lime;
<section>
padding: 1em; margin-left: 1em;
<article>Article 1</article> border-radius: 15px;
}
<article>Article 2</article> header { }
<article>Article 3</article> background-color: yellow; article {
text-align: center; background-color: aqua;
</section>
padding: 1em; margin: 1em;
</div> }
border-radius: 15px;
<footer> } footer {
© IDS #conteneur { background-color: fuchsia;
width: 100%; text-align: center;
</footer>
margin-top: 1em; padding: 1em;
</main> border-radius: 15px;
171 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 172 }
Programmation web } http://eric.univ-lyon2.fr/jdarmont/
171 172
http://blog.teamtreehouse.com/modern-field-guide-responsive-web-design
blog.teamtreehouse.com
– Sidebar : 300px / 960px = 31.25%
– Main Content : 640px / 960px = 66.67%
– Margin : 20px / 960px = 2.08%
173 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 174 Programmation web http://eric.univ-lyon2.fr/jdarmont/
173 174
29
Responsive design en pratique (2/2) Grilles (1/3) https://blog.goetter.fr/2016/01/02/grid-layout-vers-la-grille-parfaite/
Images fluides
Remplacent les mises en forme classiques
– Taille variable en fonction de la grille fluide
– CSS
img { max-width: 100%; } Définition d’une grille
175 176
Grille adaptative
Éléments à taille multiple /* Tablette : 2 colonnes */
@media (max-width: 640px) {
@media (min-width: 481px) { .container {
.col-span { grid-template-columns: repeat(2, 1fr);
grid-column: span 2; /* double taille en largeur */ }
} }
.row-span { /* Téléphone mobile : 1 colonne */
grid-row: span 2 /* double taille en hauteur */ @media (max-width: 480px) {
} .container {
} grid-template-columns: 1fr;
}
}
177 Programmation web http://eric.univ-lyon2.fr/jdarmont/ 178 Programmation web http://eric.univ-lyon2.fr/jdarmont/
177 178
Plan du cours
Objectifs du cours
Bases de PHP
PHP objet
Interface PHP-bases de données
Architecture MVC et gabarits
Annexes
Langage HTML5
Feuilles de style CSS3
179
30