Programmation Web
http://eric.univ-lyon2.fr/~jdarmont/?page_id=449
Master 1 IDSM-Kharkiv
Année 2015-2016
Jérôme Darmont
http://eric.univ-lyon2.fr/~jdarmont/?feed=rss2
1
Règles d'écriture XHTML Squelette d'un document HTML
Les noms des balises doivent être écrits en minuscules. <!DOCTYPE html> <!-- Identification du type du document
(note : ceci est un commentaire) -->
Toute balise ouverte doit être fermée. <html>
2
Structuration du document Titres, paragraphes, séparateurs
3
Ancres Images
Multimédia Figures
Sons : balise <audio> </audio> Élément de structuration (comme section, article…)
Vidéos : balise <video> </video> Balise : <figure> </figure>
Attributs communs Légende : <figcaption> </figcaption>
– src : URI 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>
</audio>
21 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 22 </figure> Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
4
Listes de définitions Imbrication de listes
Exemple Exemple
<dl>
<dt>1er terme</dt> <ul>
<dd>Définition du 1er terme</dd> <li>Elément non ordonné 1
<dt>2ème terme</dt> <ol>
<dd>Définition du 2ème terme</dd> <li>Sous-élément ordonné 1.1</li>
</dl> <li>Sous-élément ordonné 1.2</li>
</ol>
Résultat à l'affichage </li>
<li>Elément non ordonné 2</li>
1er terme </ul>
Définition du 1er terme
2ème terme
Définition du 2ème terme
25 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 26 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
Mes totaux
C1 C2 L1
Jour de la semaine Montant Total
Lundi 456 euros 456 euros L12
Mardi 200 euros 656 euros
C12 L2
5
Tableaux à cellules recouvrantes Plan du cours
Fonds sombres, images de fonds chargées, couleurs Ouvrir de nouvelles fenêtres, des pop-ups, etc.
trop nombreuses
Pages lourdes à charger (contenant des images
Gadgets technologiques (animations, textes qui volumineuses, par exemple)
défilent, sons, Javascripts divers…)
Pages trop larges (scrolling latéral)
Surcharger la page de texte ou d'images :
trop d'information tue l'information Pages trop longues (scrolling vertical)
Qu’est-ce que le Web 2.0 ? Chaque site / chaque page a un but précis.
6
Comment « faire simple » ? Exemple de simplification
pixels décoratifs
Minimiser le ratio
pixels porteurs d’information
Supprimer tout les éléments non strictement
nécessaires
Essayer des solutions alternatives pour arriver au
même résultat plus simplement
Utiliser les éléments visuel pour communiquer, jamais
pour décorer
Centrer le site dans la fenêtre du navigateur Distinguer clairement une section d’entête
(logo ou marque bien visible, zone de navigation)
Limiter le nombre de colonnes à 2 (3 maximum)
Contre-exemple !
Titres en gras
– Attire l’attention sur les
zones importantes du site
7
Éléments de présentation Navigation
Éviter la "balkanisation du Web" des années 90 Contrôle qualité (validation des pages Web)
Interopérabilité et portabilité (PDA, téléphones Réduction considérable du volume des documents
mobiles…)
Référencement efficace dans les moteurs de
Accessibilité aux personnes handicapées recherche
Réduction des coûts de développement
Pérennité des documents
Exploitation de la technologie XML (vers le Web
sémantique / Web 3.0) Rétrocompatibilité avec les anciens navigateurs
– Exemple : moteurs de recherche (personnalisation, suggestions,
résumé d’informations…)
47 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 48 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
8
Accessibilité Accessibilité
Gestion simplifiée et globale de la présentation d'un Trois localisations possibles (+local au +global)
site
Dans une balise HTML : attribut style
Coûts de développement et de maintenance allégés – Ex. <p style="color: blue; text-align: center;">…</p>
(code plus simple)
Dans une page HTML : balise <style>
Code source allégé – Dans l'en-tête de la page Web (head) :
<style type="text/css">…</style>
Possibilité de présentations différentes selon le profil
utilisateur, la résolution écran… Dans un fichier séparé
– Appel dans l'en-tête de la page Web (head) :
Meilleure accessibilité <link rel="stylesheet" type="text/css" href="feuille_style.css" />
53 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 54 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
9
Notion de cascade Unités de taille
Imbrication des balises : le style d'une balise s'applique Unités relatives (à privilégier, cf. Responsive design)
aux balises imbriquées. – em : hauteur de ligne
– Ex. <p>…<em>…</em>…</p> – % : proportion par rapport à la taille de la fenêtre
Si un style est appliqué à <p>, il s'applique à <em>.
Nom prédéfini : aqua, black, blue, fucshia, green, gray, Feuille de style : ensemble de règles
lime, maroon, navy, olive, purple, red, silver, teal, – Un sélecteur
white, yellow – Des propriétés
– Une valeur pour chaque propriété
Spécification RGB (Rouge Vert Bleu - RVB)
– Ex. Jaune : rgb(255, 255, 0)
Exemple
h1 { color: yellow;
Code RGB hexadécimal font-weight: bold;
– Ex. Jaune : #FFFF00 }
10
Classe de style Application des styles
11
Propriétés de boîte englobante Propriétés d'hyperlien
width width: 80pt; Hyperliens
height height: 25%; – Ex. a { color: blue; }
padding padding: 5px;
-left, -right, -top, -bottom padding-bottom: 10px;
Hyperliens visités
Boîte
– Ex. a:visited { color: purple; }
margin margin: 10px;
centrée
-left, -right, -top, -bottom margin-left: 10%; Hyperliens survolés (avec le pointeur de souris)
margin-left: auto; margin-right: auto;
– Ex. a:hover { color: white; background-color: blue; }
border border: 2px solid #FF00FF;
-width, -style, -color border-style: dotted; Coins Hyperliens activés
border-radius: 15px; ronds – Ex. a:active { color: purple; }
overflow overflow: auto;
67 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 68 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
Style 1 (CSS)
table, td { border: 1px solid black; }
C3 C4 C3 C4 Style 2 (CSS)
table, td { border: 1px solid black; }
table { border-collapse: collapse; }
12
Positionnement flottant Positionnement flottant
Conteneur
(style .page)
Positionnement flottant 100 % Positionnement flottant
Exemple 2 : pagination en trois colonnes Exemple 2 :
Bla bla sur fond vert… 1em CSS .boite_verte { position: relative;
Idem sur fond jaune
Bla bla sur fond vert… background-color: #00FF00;
Bla bla sur fond vert… width: 15em; }
13
Exemple de mise en page : Objectif Exemple de mise en page : HTML
<main>
<header>
<h1>Exemple de mise en page</h1>
</header>
<div id="conteneur">
<nav>
<a href="http://www.univ-lyon2.fr">Université Lyon 2</a>
</nav>
<section>
<article>Article 1</article>
<article>Article 2</article>
<article>Article 3</article>
</section>
</div>
<footer>
© IDSM
</footer>
<main>
79 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 80 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
http://blog.teamtreehouse.com/modern-field-guide-responsive-web-design
http://blog.teamtreehouse.com/modern-field-guide-responsive-web-design
Images fluides
Langage HTML
– Taille variable en fonction de la grille fluide
– CSS Éléments de design Web
img { max-width: 100%; } Feuilles de style en cascade (CSS)
Langage de script PHP
Requêtes de média
– Application de style conditionnelle
Connexion à une base de données (MySQL)
– CSS
@media screen and (min-width: 300px) { /* styles pour mobiles */ }
@media screen and (min-width: 600px) { /* styles pour tablettes */ }
@media screen and (min-width: 900px) { /* styles pour ordis */ }
83 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 84 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
14
Généralités Généralités
PHP : PHP Hypertext Preprocessor Syntaxe du langage PHP proche de celles de C, Perl
Langage de script permettant d'insérer de la ou Java
programmation dans des pages Web
⇒ Pages Web dynamiques Support d'un grand nombre de bases de données
Versions : Support de services internet (IMAP, POP3, NNTP,
– 1994 : Conception par Rasmus Lerdorf HTTP)
– 1995 : Première version publique
– 1995 : PHP/FI Gratuit, fonctionne sous Unix et Windows
– 1997 : PHP 3
– 2000 : PHP 4
– 2004 : PHP 5
85 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 86 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
PHP : Langage de script "serveur" comme ASP Passage du HTML à PHP (échappement) : <script
(≠ Javascript, langage de script "client") language="php"> </script> ou <?php ?>
Script exécuté sur le serveur – Ex. <?php echo "Bonjour"; ?>
<html>
<body> Séparateurs d'instructions : ;
<?php echo "Bonjour"; ?>
</html>
</body>
Commentaires
Page web avec script Serveur Web Client
– Ex. // Toute une ligne (façon C++)
<html> # Toute une ligne (façon Shell Unix)
<body>
Bonjour
/* Plusieurs
</html> lignes (façon C) */
</body>
15
Variables et types Constantes
Opérateurs Opérateurs
Opérateurs Affichage
Opérateurs logiques Procédures prédéfinies
– ET : and ou && – Ex. echo "Bonjour !";
– OU : or ou || – Ex. print("Bonjour !");
– OU exclusif : xor – Ces deux procédures sont le seul moyen d'afficher quelque
– NON : ! chose dans le document HTML final.
– Affichage de tableau : print_r($my_array);
Opérateurs de comparaison
– Égalité/Différence : == != Formatage : Utilisation des balises HTML
– Inférieur/Supérieur : < > – Ex. echo "<h1>TITRE</h1>";
– Inférieur ou égal/Supérieur ou égal : <= >=
Saut de ligne dans le code source
– Ex. echo "<h1>TITRE</h1>\n";
95 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 96 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
16
Affichage du contenu de variables Structures de contrôle
Boucle "tant que" : while(expr) {instr} Boucle "pour tout élément" de tableau scalaire
– Ex. $i=1; foreach (tableau as valeur) instructions
while ($i<=10) { echo $i++;
}
– Ex. $tab[0]="Rouge";
Boucle "répéter tant que" : do {instr} while(expr) $tab[1]="Vert";
– Ex. $i=1; $tab[2]="Bleu";
do { echo $i++; foreach ($tab as $val) {
} while ($i<=10); echo "Valeur courante : $val<br />";
}
Boucle "pour" : for (expr1; expr2; expr3) {instr}
– Ex. for ($i=1; $i<=10; $i++) { echo $i;
}
101 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 102 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
17
Structures de contrôle Structures de contrôle
Boucle "pour tout élément" de tableau associatif Inclusion de fichiers dans une page
foreach (tableau as clé => valeur) instructions – Fonction require() : Provoque une erreur fatale si le fichier
requis manque (interruption du script)
– Fonction include() : Provoque seulement un avertissement
– Ex. $tab["Rouge"]="#FF0000"; (warning) si le fichier requis manque
$tab["Vert"]="#00FF00"; – Évaluation des fichiers inclus en mode HTML
$tab["Bleu"]="#0000FF";
foreach ($tab as $cle => $val) {
echo "Code de $cle : $val<br />";
Exemples (paramètre des fonctions : une URI)
} – require("mes_fonctions.inc.php");
– include("une_page_web.html");
– include('http://serveur.fr/pg.html');
Fonctions Fonctions
Squelette de définition de fonction Passage de paramètres par référence (paramètres passés
function nom_fn ($p1, $p2, …, $pn) { par valeur par défaut) : &
// Code de la fonction – Ex. function alaligne(&$chaine) {
return val_retour; // Optionnel $chaine .= "<br />";
} }
$ch="Coucou !";
alaligne($ch); // <br /> ajouté à la fin
Exemple
function mon_max ($n1, $n2) { Paramètres par défaut
return ($n1>$n2) ? $n1 : $n2;
– Ex. function cafe($type="expresso") {
} return "Je fais un $type<br />";
}
echo cafe(); // Je fais un expresso
Une fonction doit être définie avant d'être appelée. echo cafe("capucino"); // Je fais un capucino
105 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 106 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
18
Plan du cours Principe
Imbrication de requêtes SQL dans du code PHP +
Langage HTML formulaires HTML pour les mises à jour
Éléments de design Web
Feuilles de style en cascade (CSS) SGBD utilisé : MySQL
– Serveur de BD SQL multi-utilisateurs rapide
Langage de script PHP – Développé depuis 1995 (version actuelle : MySQL 5)
Connexion à une base de données (MySQL) – Disponible sous licence GPL ou commerciale
CREATE TABLE etudiant ( numetu INT PRIMARY KEY, Suppression d'un n-uplet
nom VARCHAR(50), DELETE FROM nom_table WHERE condition
prenom VARCHAR(100), – Ex. DELETE FROM etudiant WHERE numetu = 123
datenaiss DATE,
note FLOAT ) Modification d'un n-uplet
UPDATE nom_table SET attribut = valeur WHERE condition
– Ex. UPDATE etudiant SET note = 20 WHERE numetu = 123
19
Éléments de langage SQL PDO : Connexion à une BD
20
Formulaires HTML Formulaires HTML
Différence entre les méthodes get et post Saisie dans un formulaire : <input />
– get : apparition des valeurs saisies en paramètres de l'URI de – Attribut obligatoire : name, nom de la variable
la page action
Champ texte : <input type="text" size="" />
– post : . valeurs saisies cachées
. quantité de données possible plus importante – Ex. <input type="text" name="nom" size="30" />
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é" />
21
Formulaires HTML Formulaires HTML
Étape 1 : formulaire dans une page HTML Variables disponibles dans la page cible
– Ex. – $_FILES["monfichier"]["name"] : nom original du fichier
<form action="telechargement.php" method="post" – $_FILES["monfichier"]["size"] : taille du fichier
enctype="multipart/form-data" /> – $_FILES["monfichier"]["tmp_name"] : nom temporaire du fichier sur la
<fieldset> machine serveur
<input type="hidden" name="MAX_FILE_SIZE" value="50000" />
Fichier : <input name="monfichier" type="file" />
<input type="submit" value="Télécharger" /> Exemple de code dans la page telechargement.php
</fieldset> $destination = "/home/jd/public_html/" . $_FILES["monfichier"]["name"];
</form> $res = move_uploaded_file($_FILES["monfichier"]["tmp_name"],
$destination);
if ($res) echo "<p>Fichier téléchargé avec succès</p>";
Étape 2 : traitement à l'aide de PHP else echo "<p>Erreur : " . $_FILES["monfichier"]["error"] . "</p>";
22
Transmission de variables Transmission de variables
d'une page PHP à une autre d'une page PHP à une autre
Transmission de variables
d'une page PHP à une autre Sessions
<?php // suivante.php
Objectif : Stockage de variables lors de la navigation
// Méthode 1 sur plusieurs pages Web successives
$nom = $_POST["nom"];
$age = $_POST["age"];
Utilisations courantes :
– Identification des visiteurs d'un site par login et mot de passe
// Méthode 2
stockés dans une base de données
$nom = $_GET["nom"];
– Gestion du profil des utilisateurs
$age = $_GET["age"];
– …
?>
Sessions Sessions
<!-- Exemple --> <?php
<?php session_start(); ?> session_start();
<!DOCTYPE html> // Enregistre la valeur de $nom dans la variable de session s_nom
<html> $_SESSION["s_nom"] = $_POST["nom"];
<head> <title>Session 1</title> </head> ?>
<body> <!DOCTYPE html>
<form action="session2.php" method="post« > <html>
<fieldset> <head> <title>Session 2</title> </head>
Votre nom : <input type="text" name="nom" /> <body>
<input type="submit" value="Valider" /> <p>Identifiant de session : <?php echo session_id(); ?><br />
</fieldset> Nom de session : <?php echo session_name(); ?></p>
</form> <p>Bienvenue sur ma page Web, <?php echo $_SESSION["s_nom"]; ?>.<br />
</body> <a href="session3.php">Page suivante</a>.</p>
</html> </body>
</html>
137 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/ 138 Programmation Web http://eric.univ-lyon2.fr/~jdarmont/
23
Sessions Sessions
<?php session_start(); ?> <?php
<!DOCTYPE html> session_start();
<html> $_SESSION["s_nom"] = FALSE; // Suppression de la variable de session
<head> <title>Session 3</title> </head> ?>
<body> <!DOCTYPE html>
<p>Es-tu toujours là, <?php echo $_SESSION["s_nom"]; ?> ?<br /> <html>
<a href="session4.php">Détruire la variable de session</a> ou <head> <title>Session 4</title> </head>
<a href="session5.php">clore la session</a> ?</p> <body>
</body> <p>Es-tu toujours là ?
</html> <?php if ($_SESSION["s_nom"]) echo "Oui.";
else echo "Non."; ?>
<br /><a href="session5.php">Clore la session</a>.</p>
</body>
</html>
24