diff --git a/TP3_02.10.20/ansible/DockerFile b/TP3_02.10.20/ansible/DockerFile
new file mode 100644
index 0000000000000000000000000000000000000000..ab1c3d33eae9609aadd24db2797bc728accd9f6d
--- /dev/null
+++ b/TP3_02.10.20/ansible/DockerFile
@@ -0,0 +1,12 @@
+FROM debian
+MAINTAINER Olivier Choquet
+RUN apt-get update && apt-get upgrade -y
+RUN apt-get install apache2 -y
+COPY siteHTML.conf /etc/apache2/sites-available/000-default.conf
+COPY ./siteHTML /var/www/siteHTML
+#RUN a2ensite siteHTML
+#RUN echo "127.0.0.1	siteHTML" >> /etc/hosts
+EXPOSE 80
+CMD apachectl -D FOREGROUND
+# apache fonctionne en background -> container exited
+#CMD service apache2 restart
diff --git a/TP3_02.10.20/ansible/docker_sitePHP_phpMyAdmin.yml b/TP3_02.10.20/ansible/docker_sitePHP_phpMyAdmin.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d7228e4c1ae94403251c99c43f79dd313990b3a0
--- /dev/null
+++ b/TP3_02.10.20/ansible/docker_sitePHP_phpMyAdmin.yml
@@ -0,0 +1,29 @@
+---
+- hosts: all
+  become: true
+  # vars:
+  #   create_containers: 1
+  #   default_container_name: httpd
+  #   default_container_image:
+  #   default_container_command:
+
+  tasks:
+    - name: install apache2
+      apt: name=apache2 update_cache=yes state=latest
+
+    # - name: create sitePHPDocker folder
+    #   file:
+    #     path: /root/sitePHPDocker
+    #     state: directory
+
+    - name: Recursively remove directory
+      file:
+        path: /root/sitePHPDocker
+        state: absent
+
+    - name: copy files of sitePHPDocker
+      copy:
+        src: "/home/pierre/Bureau/MASTER 1 2020 - 2021/Cours/Quadrimestre 1/DAC/dac-tp/TP3_02.10.20/ansible/sitePHPDocker"
+        dest: "/root/"
+      ignore_errors: yes
+      
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/docker_ubuntu_removeImages&Containers.yml b/TP3_02.10.20/ansible/docker_ubuntu_removeImages&Containers.yml
index 07f6ffc0b59cc236e60fa9ac5774ee3fdcf2473d..3756634e7919393c0858a2f70e33087da14d5bc8 100644
--- a/TP3_02.10.20/ansible/docker_ubuntu_removeImages&Containers.yml
+++ b/TP3_02.10.20/ansible/docker_ubuntu_removeImages&Containers.yml
@@ -1,5 +1,5 @@
 ---
-- name: firewalld
+- name: RemovePlaybook
   #hosts: serveurs_sans_ssh
   hosts: all
   become: true
@@ -10,8 +10,31 @@
       docker_host_info:
         containers: True
       register: docker_info
+
     - name: Stop all running containers
       docker_container:
         name: '{{ item.Names[0] | regex_replace("^/", "") }}'
         state: stopped
       loop: '{{ docker_info.containers }}'
+
+    - name: delete all containers
+      shell: |
+        docker rm $(docker ps -a -q);
+
+
+
+
+
+
+    - name: Get a list of all images
+      docker_host_info:
+        images: True
+      register: docker_info
+
+    - debug: msg="{{docker_info.images}}"
+
+
+    - name: remove imgsitephpdb
+      docker_image:
+        state: absent
+        name: mongo
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/construire_docker_images_et_containers.sh b/TP3_02.10.20/ansible/sitePHPDocker/construire_docker_images_et_containers.sh
new file mode 100644
index 0000000000000000000000000000000000000000..7870cff2eb07a0974216ad81e4212e7512cab22b
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/construire_docker_images_et_containers.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+docker build -t imgsitephp contsitephp/
+docker build -t imgsitephpdb contdbphp/
+#utiliser phpmyadmin pour gérer la db mysql
+#docker pull phpmyadmin/phpmyadmin:latest
+docker run -d -p 3306:3306 --name contsitephpdb --network=sitephpnet imgsitephpdb
+#docker run -d --name contmysql mysql
+#docker run -d -p 8002:80 --name contphpmyadmin --network=sitephpnet --link contsitephpdb:db phpmyadmin/phpmyadmin
+docker run -d -p 8001:80 --name contsitephp --network=sitephpnet imgsitephp
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..6e87905780c3ce9ff46649ddbf538c36cb03fbe2
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile
@@ -0,0 +1,6 @@
+FROM mysql
+MAINTAINER Pierre Michiels
+ENV MYSQL_DATABASE=bdbn
+#ENV MYSQL_TCP_PORT=8002
+ENV MYSQL_ROOT_PASSWORD=ipl
+COPY bdbn.sql /docker-entrypoint-initdb.d
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile~ b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile~
new file mode 100644
index 0000000000000000000000000000000000000000..b86e213320de8c8c8bd16d107d1408d6e6c7ddd0
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile~
@@ -0,0 +1,7 @@
+FROM mysql
+MAINTAINER Olivier Choquet
+ENV MYSQL_DATABASE=bdbn
+ENV MYSQL_ROOT_PASSWORD=ipl
+# la DB sera créée à l'intérieur du conteneur via 
+# mysql -u root -p < bdbn.sql
+COPY bdbn.sql /root/bdbn.sql
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/bdbn.sql b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/bdbn.sql
new file mode 100644
index 0000000000000000000000000000000000000000..30b41ef798c1df015915259d13f5e681196b1967
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/bdbn.sql
@@ -0,0 +1,66 @@
+-- phpMyAdmin SQL Dump
+-- version 4.6.4
+-- https://www.phpmyadmin.net/
+--
+-- Client :  127.0.0.1
+-- Généré le :  Mar 18 Juillet 2017 à 10:20
+-- Version du serveur :  5.7.14
+-- Version de PHP :  5.6.25
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Base de données :  `bdbn`
+--
+CREATE DATABASE IF NOT EXISTS `bdbn` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
+USE `bdbn`;
+
+-- --------------------------------------------------------
+
+--
+-- Structure de la table `livres`
+--
+
+DROP TABLE IF EXISTS `livres`;
+CREATE TABLE `livres` (
+  `no` int(11) NOT NULL,
+  `titre` varchar(255) NOT NULL,
+  `auteur` varchar(255) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Contenu de la table `livres`
+--
+
+INSERT INTO `livres` (`no`, `titre`, `auteur`) VALUES
+(1, 'test', 'test');
+
+--
+-- Index pour les tables exportées
+--
+
+--
+-- Index pour la table `livres`
+--
+ALTER TABLE `livres`
+  ADD PRIMARY KEY (`no`);
+
+--
+-- AUTO_INCREMENT pour les tables exportées
+--
+
+--
+-- AUTO_INCREMENT pour la table `livres`
+--
+ALTER TABLE `livres`
+  MODIFY `no` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Db.class.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Db.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..1e217b396d9642385d60e50206fd13c43a18bd28
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Db.class.php
@@ -0,0 +1,56 @@
+<?php
+class Db
+{
+    private static $instance = null;
+    private $_db;
+
+    private function __construct()
+    {
+        try {
+            $this->_db = new PDO('mysql:host=contsitephpdb;dbname=bdbn', 'root', 'ipl');
+            $this->_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
+			$this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
+        } 
+		catch (PDOException $e) {
+		    die('Erreur de connexion à la base de données : '.$e->getMessage());
+        }
+    }
+
+	# Pattern Singleton
+    public static function getInstance()
+    {
+        if (is_null(self::$instance)) {
+            self::$instance = new Db();
+        }
+        return self::$instance;
+    }
+
+	# Fonction qui exécute un SELECT dans la table des livres 
+	# et qui renvoie un tableau d'objet(s) de la classe Livre
+	public function select_livres() {
+		# Définition du query
+		$query = 'SELECT * FROM livres ORDER BY no DESC';
+		
+		# Exécution du query
+		$result = $this->_db->query($query); 
+
+		# Parcours de l'ensemble des résultats et construction d'un tableau d'objet(s) de la classe Livre
+		$tableau = array();
+		if ($result->rowcount()!=0) {
+			while ($row = $result->fetch()) {		
+				$tableau[] = new Livre($row->no,$row->titre,$row->auteur);
+			}
+		}	
+		# pour debug : affichage ici possible de l'array à l'aide de var_dump($tableau);
+		# var_dump($tableau);
+		return $tableau;
+	}	
+
+	public function send_livre() {
+		echo "dans send livre";
+		$val = $_POST[something];
+		$query = 'INSERT INTO livres (titre, auteur) VALUES( $val , "no data")';
+
+		$result = $this->_db->query($query); 
+	}
+}
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Dockerfile b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..12a46718a9c3f95a632a9a8c2810e874d522707f
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Dockerfile
@@ -0,0 +1,11 @@
+FROM php:7.2.8-apache-stretch
+RUN docker-php-ext-install pdo_mysql
+MAINTAINER Pierre Michiels
+EXPOSE 80
+COPY sitePHP.conf /etc/apache2/sites-available/000-default.conf
+COPY siteBonneNouvelles /var/www/sitePHP
+# modifier éventuellement le nom du conteneur et mdp de passe dans Db.class.php
+# docker utilisera au niveau réseau le nom du conteneur pour atteindre le conteneur de la DB
+COPY Db.class.php /var/www/sitePHP/models/Db.class.php
+CMD apache2ctl -D FOREGROUND
+
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php
new file mode 100644
index 0000000000000000000000000000000000000000..727b78a075c2b68a7603a34b75539edefb1c23f5
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php
@@ -0,0 +1,14 @@
+<?php 
+class AccueilController{
+	
+	public function __construct() {
+
+	}
+			
+	public function run(){	
+		
+		# Un contrôleur se termine en écrivant une vue
+		require_once(CHEMIN_VUES . 'accueil.php');
+	}
+	
+}
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php
new file mode 100644
index 0000000000000000000000000000000000000000..75c9865bdf2d5c6138e390837130e121430a75d8
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php
@@ -0,0 +1,37 @@
+<?php 
+class ContactController{
+
+	public function __construct() {
+
+	}
+			
+	public function run(){	
+		
+		# Envoi d'un email sur base des informations du formulaire transmises par la méthode POST
+		$notification='';
+		if (!empty($_POST)) {
+			
+			if (empty($_POST['email']) && empty($_POST['message'])) {
+				$notification='Entrez un email et un message non vides!';
+			} elseif (empty($_POST['email'])) {
+				$notification='Entrez un email non vide!';
+			} elseif (empty($_POST['message'])) {
+				$notification='Entrez un message non vide!';
+			} else {			
+				$to      = 'webmaster@votresite';
+				$subject = 'Test du site des bonnes nouvelles';
+				$message = $_POST['message'];
+				$headers = 'From: ' . $_POST['email'];
+
+				if (mail($to, $subject, $message, $headers)) {
+					$notification='Vos informations ont été transmises avec succès.';
+				} else {
+					$notification='Vos informations n\'ont pas été transmises.';
+				}
+			}
+		}
+		
+		# Ecrire ici la vue
+		require_once(CHEMIN_VUES . 'contact.php');
+	}
+} 
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php
new file mode 100644
index 0000000000000000000000000000000000000000..b0468bb0347d93415de180ce766e3672f9b39a4b
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php
@@ -0,0 +1,25 @@
+<?php 
+class GeneseController{
+
+	public function __construct() {
+
+	}
+			
+	public function run(){	
+
+		# Tableau de l'évolution du cours de PHP à l'IPL
+		$cphp[2009] = 'PHP structuré en modules avec accès à SQLite comme base de données';
+		$cphp[2010] = 'PHP structuré en modules avec accès à MySQL comme base de données';
+		$cphp[2011] = 'PHP structuré en modules avec PDO OO accédant à MySQL comme base de données';
+		$cphp[2012] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données';
+		$cphp[2013] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données';
+		$cphp[2014] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données';
+		$cphp[2015] = 'PHP OO structuré en MVC avec PDO OO accédant à MySql comme base de données';
+
+		# Un contrôleur se termine en écrivant une vue
+		require_once(CHEMIN_VUES . 'genese.php');
+	}
+	
+	
+
+} 
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php
new file mode 100644
index 0000000000000000000000000000000000000000..868d07f12fcc4d50adaad43ba273786b717309ee
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php
@@ -0,0 +1,26 @@
+<?php 
+class LivresController{
+
+	public function __construct() {
+	
+	}
+			
+	public function run(){	
+		
+		# Variable HTML dans la vue
+		$tablivres='';
+		
+		# Sélection de tous les livres sous forme de tableau
+		$tablivres=Db::getInstance()->select_livres();
+
+		#envoyer un livre
+		if(isset($_POST['submit'])){
+			echo "Dans livres controller";
+			Db::getInstance()->send_livre();
+		}	
+		
+		# Ecrire ici la vue
+		# $tablivres contient un tableau d'objets de la classe Livre
+		require_once(CHEMIN_VUES . 'livres.php');
+	}
+} 
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..9fb9e81dcdd2e035c4303687ae92ff6df66bd90c
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php
@@ -0,0 +1,50 @@
+<?php
+	# Prise du temps actuel au début du script
+	$time_start = microtime(true);
+
+	# Variables globales du site
+	define('CHEMIN_VUES','views/');
+	define('CHEMIN_CONTROLLERS','controllers/');
+    define('EMAIL','pierre.michiels.etu@univ-lille.fr');
+	$date = date("j/m/Y");
+	
+	# Require des classes automatisé
+	function chargerClasse($classe) {
+		require 'models/' . $classe . '.class.php';
+	}
+	spl_autoload_register('chargerClasse'); 
+
+	# Ecrire ici le header de toutes pages HTML
+	require_once(CHEMIN_VUES . 'header.php');
+	
+	# Ecrire ici le menu du site de toutes pages HTML
+	require_once(CHEMIN_VUES . 'menu.php');
+
+	# Tester si une variable GET 'action' est précisée dans l'URL index.php?action=...
+	$action = (isset($_GET['action'])) ? htmlentities($_GET['action']) : 'default';
+	# Quelle action est demandée ?
+	switch($action) {
+		case 'genese':
+			require_once('controllers/GeneseController.php');	
+			$controller = new GeneseController();
+			break;
+		case 'livres':
+			require_once('controllers/LivresController.php');	
+			$controller = new LivresController();
+			break;
+		case 'contact':
+			require_once('controllers/ContactController.php');	
+			$controller = new ContactController();
+			break;	
+		default: # Par défaut, le contrôleur de l'accueil est sélectionné
+			require_once('controllers/AccueilController.php');	
+			$controller = new AccueilController();
+			break;
+	}
+	# Exécution du contrôleur correspondant à l'action demandée
+	$controller->run();
+	
+	# Ecrire ici le footer du site de toutes pages HTML
+	require_once(CHEMIN_VUES . 'footer.php');
+
+?>
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ce1eed4036442625444dfb7382dde2035fe90dc
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php
@@ -0,0 +1,48 @@
+<?php
+class Db
+{
+    private static $instance = null;
+    private $_db;
+
+    private function __construct()
+    {
+        try {
+            $this->_db = new PDO('mysql:host=contsitephpdb;dbname=bdbn', 'root', 'ipl');
+            $this->_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
+			$this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
+        } 
+		catch (PDOException $e) {
+		    die('Erreur de connexion à la base de données : '.$e->getMessage());
+        }
+    }
+
+	# Pattern Singleton
+    public static function getInstance()
+    {
+        if (is_null(self::$instance)) {
+            self::$instance = new Db();
+        }
+        return self::$instance;
+    }
+
+	# Fonction qui exécute un SELECT dans la table des livres 
+	# et qui renvoie un tableau d'objet(s) de la classe Livre
+	public function select_livres() {
+		# Définition du query
+		$query = 'SELECT * FROM livres ORDER BY no DESC';
+		
+		# Exécution du query
+		$result = $this->_db->query($query); 
+
+		# Parcours de l'ensemble des résultats et construction d'un tableau d'objet(s) de la classe Livre
+		$tableau = array();
+		if ($result->rowcount()!=0) {
+			while ($row = $result->fetch()) {		
+				$tableau[] = new Livre($row->no,$row->titre,$row->auteur);
+			}
+		}	
+		# pour debug : affichage ici possible de l'array à l'aide de var_dump($tableau);
+		# var_dump($tableau);
+		return $tableau;
+	}	
+}
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ef941396e826df09eb38ee99e2726c8d563c404
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php
@@ -0,0 +1,25 @@
+<?php
+class Livre{
+	private $_no;
+	private $_titre;
+	private $_auteur;
+	
+	public function __construct($no,$titre, $auteur){
+		$this->_no = $no;
+		$this->_titre = $titre;
+		$this->_auteur = $auteur;
+	}
+	
+	public function no(){
+		return $this->_no;		
+	}	
+		
+	public function titre(){
+		return $this->_titre;
+	}
+	
+	public function auteur(){
+		return $this->_auteur;
+	}
+}
+?>
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ca8b6bc60cdf6dfff46ca53632ee9602690ff39
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php
@@ -0,0 +1,5 @@
+<div id="contenu">
+	<h2>Accueil</h2>
+	<p>Bienvenue aux séances d'exercices consacrées à élaborer un site Internet en PHP selon une architecture didactique MVC OO.</p>
+	<p>Jean-Luc Collinet.</p>
+</div><!-- #contenu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d16ad739146e9cdd0b3bbd1b0d107774ec38254
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php
@@ -0,0 +1,13 @@
+<div id="contenu">
+	<h2>Contactez-nous</h2>
+	<p>Bienvenue sur la page de contact.</p>
+	<p>Cette page est demandée grâce à la valeur 'contact' du paramètre 'action' passé par la méthode GET, visible dans l'URL /index.php?action=contact.</p>
+	<div id="notification"><?php echo $notification ?></div>
+	<div class="formulaire">
+		<form action="index.php?action=contact" method="post">
+		<p>Votre email : <input type="text" name="email" /></p>
+		<p><textarea rows="3" name="message">Entrez votre message ici</textarea></p>
+		<p><input type="submit" name="form_contact" value="Envoyer"></p>
+		</form>
+	</div>
+</div><!-- #contenu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css
new file mode 100644
index 0000000000000000000000000000000000000000..7dcf24082821d9eba565dd154f137bceac4e2118
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css
@@ -0,0 +1,184 @@
+/* ==============================================
+   FEUILLE DE STYLES DES GABARITS HTML/CSS
+   � Elephorm & Alsacreations.com
+   Conditions d'utilisation:
+   http://creativecommons.org/licenses/by/2.0/fr/
+   ============================================== */
+
+
+/* --- STYLES DE BASE POUR LE TEXTE ET LES PRINCIPAUX �L�MENTS --- */
+
+/* Page */
+html {
+	font-size: 100%; /* Voir -> Note 1 � la fin de la feuille de styles. */
+}
+body {
+	margin: 10;
+	padding: 10px 20px; /* Note -> 2 */
+	font-family: Verdana, "Bitstream Vera Sans", "Lucida Grande", sans-serif; /* 3 */
+	font-size: .8em; /* -> 4 */
+	line-height: 1.25; /* -> 5 */
+	color: black;
+	background: white;
+}
+
+/* Titres */
+h1, h2, h3, h4, h5, h6 {
+	margin: 1em 0 .5em 0; /* -> 6 */
+}
+h1, h2 {
+	font-family: Georgia, "Bitstream Vera Serif", Norasi, serif;
+	font-weight: normal; /* -> 7 */
+}
+h1 {
+	font-size: 3em; /* -> 8 */
+	font-style: italic;
+}
+h2 {font-size: 1.8em;}
+h3 {font-size: 1.2em;}
+h4 {font-size: 1em;}
+
+/* Listes */
+ul, ol {
+	margin: .75em 0 .75em 24px;
+	padding: 0; /* -> 9 */
+}
+ul {
+	list-style: square;
+}
+li {
+	margin: 0;
+	padding: 0;
+}
+
+/* Paragraphes */
+p {
+	margin: .75em 0;
+}
+li p, blockquote p {
+	margin: .5em 0;
+}
+
+/* Citations */
+blockquote, q {
+	font-size: 1.1em;
+	font-style: italic;
+	font-family: Georgia, "Bitstream Vera Serif", Norasi, serif;
+}
+blockquote {
+	margin: .75em 0 .75em 24px;
+}
+cite {
+	font-style: italic;
+}
+
+/* Liens */
+a {
+	color: mediumblue;
+	text-decoration: underline;
+}
+a:hover, a:focus {
+	color: crimson;
+}
+a img {
+	border: none; /* -> 10 */
+}
+
+/* Divers �l�ments de type en-ligne */
+em {
+	font-style: italic;
+}
+strong {
+	font-weight: bold;
+	color: dimgray;
+}
+
+
+/* --- STYLES POUR CERTAINS CONTENUS DES GABARITS --- */
+
+pre, code {
+	font-size: 100%;
+	font-family: "Bitstream Vera Mono", "Lucida Console", "Courier New", monospace;
+}
+pre {
+	width: 90%;
+	overflow: auto;
+	overflow-y: hidden;
+	margin: .75em 0;
+	padding: 12px;
+	background: #eee;
+	color: #555;
+}
+pre strong {
+	font-weight: normal;
+	color: black;
+}
+#copyright {
+	margin: 20px 0 5px 0;
+	text-align: right;
+	font-size: .8em;
+	color: #848F63;
+}
+#copyright a {
+	color: #848F63;
+	text-decoration: none;
+}
+#copyright a:hover, #copyright a:focus {
+	text-decoration: underline;
+}
+
+
+/* --- NOTES ---
+
+1.	Ce "font-size: 100%" est normalement inutile. On l'utilise uniquement
+	pour �viter un bug de redimensionnement du texte dans Internet Explorer.
+
+2.	Par d�faut, les navigateurs ont un padding (ou, pour certains, un
+	margin) de 6px pour l'�l�ment BODY. C'est ce qui �vite que le texte
+	ne soit compl�tement coll� aux bords de la zone de visualisation du
+	navigateur lorsqu'on affiche une page �brute�, sans mise en forme.
+	Mais ce retrait de 6px est un peu faiblard: on le renforce donc.
+	Notez bien que les feuilles de styles des gabarits pourront augmenter
+	ce retrait, ou bien l'annuler.
+	
+3.	Voici quelques exemples de collections coh�rentes de fontes (propri�t�
+	CSS "font-family"):
+	font-family: Arial, Helvetica, "Nimbus Sans L", sans-serif;
+	font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+	font-family: Georgia, "Bitstream Vera Serif", Norasi, serif;
+	font-family: "Times New Roman", Times, "Nimbus Roman No9 L", serif;
+		
+4.	Taille du texte de base de la page. D�pend de la taille du texte par
+	d�faut du navigateur (souvent 16px), et des r�glages de l'utilisateur.
+	� adapter en fonction de la fonte choisie, et du rendu souhait�.
+	En g�n�ral, on utilisera une valeur de base entre .65em et 1em
+	(ou 65% et 100%).
+
+5.	Hauteur de ligne. � adapter en fonction de la fonte choisie, et des
+	besoins particuliers (lignes de texte longues ou courtes, titre ou
+	corps de texte...).
+
+6.	En g�n�ral, les styles par d�faut des navigateurs font que les marges
+	en haut et en bas des titres sont �quivalentes. Ici, en diminuant la
+	marge du bas, on cherche � rapprocher le titre du contenu qu'il introduit.
+
+7.	Les styles par d�faut des navigateurs mettent les titres en gras.
+	Si on souhaite passer � des caract�res �normaux�, on doit utiliser
+	font-size: normal.
+
+8.	Pour un �l�ment en "font-size: 3em", la taille du texte sera le triple de
+	la taille du texte de l'�l�ment parent.
+	� noter: on aurait pu �crire "font-size: 300%" pour le m�me r�sultat.
+
+9.	Par d�faut, les listes UL et OL ont un retrait � gauche qui peut �tre,
+	suivant les navigateurs:
+	- un padding-left de 40px;
+	- ou bien un margin-left de 40px.
+	On met tout le monde d'accord avec une marge � gauche de 24px, et pas
+	de padding.
+
+10.	Les navigateurs donnent souvent aux images plac�es dans des liens
+	une bordure disgracieuse. On annule ce style souvent g�nant en appliquant
+	un "border: none" aux images qui se trouvent � l'int�rieur d'un lien.
+
+*/
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css
new file mode 100644
index 0000000000000000000000000000000000000000..6de9fd7b93340b12e47af2719414536f4e652a42
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css
@@ -0,0 +1,191 @@
+/* ==============================================
+   FEUILLE DE STYLES DES GABARITS HTML/CSS --- 01
+   � Elephorm & Alsacreations.com
+   Conditions d'utilisation:
+   http://creativecommons.org/licenses/by/2.0/fr/
+   ============================================== */
+
+
+/* --- COULEURS --- */
+
+/* Note: vous pouvez modifier simplement l'aspect de ce gabarit en modifiant
+   uniquement les couleurs de fond (propri�t�s background) et les couleurs
+   du texte (propri�t� color).
+   Pour modifier la disposition des blocs, voir plus bas dans la feuille de
+   styles la partie �positionnement�. */
+
+/* G�n�ral */
+body {
+	color: #F0E39E;
+	background: #181A12; /* Voir -> Note 1 ci-dessous */
+}
+a {
+	color: #FF6533;
+}
+a:hover, a:focus {
+	color: #FF4C00;
+}
+strong {
+	color: #A1B55D;
+}
+
+/* En-t�te */
+#entete {
+	background: #181A12;
+}
+
+/* Navigation #181A12; */
+#navigation {
+	background: #000000;
+}
+#navigation a {
+	color: #FF6533;
+}
+#navigation a:hover, #navigation a:focus {
+	background: #000000;
+}
+
+/* Contenu principal */
+#contenu {
+	color: #363B29;
+	background: #cbd888;
+}
+#contenu a {
+	color: #332510;
+}
+#contenu a:hover, #contenu a:focus {
+	color: #6E5122;
+}
+#contenu strong {
+	color: #181A12;
+}
+
+/* Pied de page */
+#pied {
+	color: #E6A948;
+}
+
+/* Formulaire */
+.formulaire {
+	padding: 12px 12px;
+	background: #cbdd88;
+}
+
+/* Notification */
+#notification {
+	color: #582758;
+}
+
+
+/* --- POSITIONNEMENT --- */
+
+/* Page */
+body {
+	padding: 0; /* -> 2 */
+}
+
+/* En-t�te */
+#entete {
+	padding: 15px 20px 10px 20px;
+}
+#entete h1 {
+	margin: 0;
+}
+#entete h1 img {
+	float: left;
+	margin: 7px 20px 10px 0;
+}
+#entete .sous-titre {
+	margin: 4px 0 15px 0;
+}
+
+/* Menu de navigation */
+#navigation {
+	padding: 12px 15px;
+}
+#navigation ul {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+}
+#navigation li {
+	display: inline; /* -> 3 */
+}
+#navigation a {
+	padding: 6px;
+	line-height: 1.5;
+	font-size: .9em;
+	text-decoration: none;
+}
+
+/* Contenu */
+#contenu {
+	padding: 10px 20px;
+}
+#contenu > :first-child {
+	margin-top: 10px;
+}
+#contenu p, #contenu li {
+	line-height: 1.5;
+}
+
+/* Pied de page */
+#pied {
+	padding: 15px 20px;
+	font-size: .85em;
+}
+#pied p {
+	margin: .5em 0;
+}
+#pied #copyright {
+	float: right;
+	margin: .5em 0 30px 10%;
+	font-size: 1em;
+}
+
+/* Tableau repris du cours d'HTML */
+.html {
+	font-family: "Bitstream Vera Mono", "Lucida Console", "Courier New",
+		monospace;
+	font-size: larger;
+	color: purple;
+}
+
+#tableBalises th{
+	border-style: solid;
+	border-width: thin;
+	border-collapse: collapse;
+	background-color: #DCDCDC;
+}
+#tableBalises td{
+	border-style: solid;
+	border-width: thin;
+	border-collapse: collapse;
+}
+
+/* --- NOTES ---
+
+1.	Notes que cette couleur de fond n'est apparente qu'en bas de page. Plus
+	haut, elle est masque: par la couleur de fond de l'en-t�te, puis par la
+	couleur de fond du menu, puis par la couleur de fond du contenu. Seul le
+	pied de page laisse apparaitre cette couleur de fond.
+
+2.	Pour ce gabarit, on supprime l'�cart entre les �bords� du navigateur et
+	le contenu, en passant le padding de l'�l�ment BODY � z�ro.
+	(Voir �galement la note num�ro 2 dans base.css.)
+
+3.	Si les �l�ments de notre menu se placent horizontalement plut�t que les
+	uns en dessous des autres, c'est parce qu'ils ne sont plus affich�s
+	comme des blocs (ce qui est normalement le cas des �l�ments LI), mais
+	comme des �l�ments de type en-ligne. On obtient ce comportement avec la
+	propri�t� "display" et la valeur "inline".
+	Le fait que nos LI se comportent comme un flot unique de texte aura deux
+	cons�quences:
+	- on va pouvoir aligner le texte du menu � gauche (c'est le cas ici), �
+	  droite ou encore au centre, en jouant sur la propri�t� "text-align" du
+	  menu (sur l'�l�ment UL ou sur div#navigation);
+	- certains styles ne pourront pas �tre appliqu�s... par exemple, la
+	  propri�t� "width" ne peut pas �tre utilis�e pour les �l�ments en
+	  "display: inline".
+
+*/
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..764891369b5f6f9275c14ac6453e03a1dc997cce
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php
@@ -0,0 +1,14 @@
+		<div id="pied">
+			<strong>Excellente journée qu'aujourd'hui le <?php echo $date ?></strong> :: 
+			<?php $time_end = microtime(true);
+				  $time = number_format(($time_end - $time_start)*1000,6);
+				  echo $time; ?>ms pour exécuter le script PHP :: 
+			<!-- ! adresse email non cryptée : spam possible -->
+	        <a href="mailto:<?php echo EMAIL ?>"><?php echo EMAIL ?></a>
+			<p id="copyright">Mise en page d'après
+				<a href="http://www.alsacreations.com/tutoriels/">Alsacréations</a>
+			</p>
+		</div><!-- #pied -->
+	</div><!-- #global -->
+	</body>
+</html>
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php
new file mode 100644
index 0000000000000000000000000000000000000000..4123d0a56d39ff6b4ff524894875cb2f6c476cbf
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php
@@ -0,0 +1,21 @@
+<div id="contenu">
+	<h2>La Genèse</h2>
+	<p>Bienvenue sur la page de la genèse.</p>
+	<table id="tableBalises">
+		<thead>
+			<tr>
+				<th>Année</th>
+				<th>Cours</th>
+			</tr>
+		</thead>
+		<tbody>
+		<?php foreach ($cphp as $annee => $cours) { ?>
+			<tr>
+			<td><span class="html"><?php echo $annee ?></span></td>
+			<td><?php echo $cours ?></td>		
+			</tr>
+		<?php } ?>
+		</tbody>
+	</table>
+	<img src="<?php echo CHEMIN_VUES ?>images/big-w3cvalidtemplate.png" alt="W3C Valid" >
+</div><!-- #contenu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php
new file mode 100644
index 0000000000000000000000000000000000000000..d06af94af1d6c771be892a1e56af3a7506d4e0df
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="fr">
+	<head>
+		<meta charset="utf-8" >
+		<title>Un site de Bonnes Nouvelles</title>
+		<link rel="stylesheet" type="text/css" href="views/css/base.css" media="all" >
+		<link rel="stylesheet" type="text/css" href="views/css/modele01.css" media="screen" >
+	</head>
+	<body>
+	<div id="global">
+		<div id="entete">
+			<h1>
+				<a href="index.php">
+				<img src="views/images/smiley.jpg" alt="Sourire">
+				</a>
+				Un site de Bonnes Nouvelles
+			</h1>
+			<p class="sous-titre">
+			</p>
+		</div><!-- entete -->
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png
new file mode 100644
index 0000000000000000000000000000000000000000..091f757258f968217eda8d7c5ba6a2c2ec142e12
Binary files /dev/null and b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png differ
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..76367dd5a1c1c1995c1b56c6d2a72b58bd335ddd
Binary files /dev/null and b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg differ
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php
new file mode 100644
index 0000000000000000000000000000000000000000..0a897af7fce17bc06bb791be29dd99a6294cfdf9
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php
@@ -0,0 +1,27 @@
+<div id="contenu">
+	<h2>Les Livres</h2>
+	<p>Bienvenue sur la page des livres.</p>
+	<table id="tableBalises">
+		<thead>
+			<tr>
+				<th>Titre</th>
+				<th>Auteur</th>
+			</tr>
+		</thead>
+		<tbody>
+		<?php for ($i=0;$i<count($tablivres);$i++) { ?>
+			<tr>
+			<td><span class="html"><?php echo $tablivres[$i]->titre() ?></span></td>
+			<td><?php echo $tablivres[$i]->auteur() ?></td>		
+			</tr>
+		<?php } ?>
+		</tbody>
+		<form action="../controllers/LivresController.php" method="post">
+			<h3>Inserer un livre ?</h3>
+			<label for="something">give something:</label>
+			<input type="text" id="something" name="something"> 
+			<input type = "submit" name = "submit" value = "Envoyer"> 
+		</form>
+		
+	</table>
+</div><!-- #contenu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d13787a32342a2c8163c4e4c8c71a78ab430c88
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php
@@ -0,0 +1,7 @@
+<div id="navigation">
+	<ul>
+		<li><a href="index.php?action=genese">La genèse</a></li>
+		<li><a href="index.php?action=livres">Les livres</a></li>
+		<li><a href="index.php?action=contact">Contactez-nous</a></li>		
+	</ul>
+</div><!-- menu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/sitePHP.conf b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/sitePHP.conf
new file mode 100644
index 0000000000000000000000000000000000000000..4464e6aad74e9f11c6e5746e22596bd8ee1961fc
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/sitePHP.conf
@@ -0,0 +1,17 @@
+<VirtualHost *:80>
+	# pas de servername -> site par défaut
+	#ServerName sitePHP
+
+	ServerAdmin webmaster@localhost
+	DocumentRoot /var/www/sitePHP
+
+	ErrorLog ${APACHE_LOG_DIR}/sitePHP_errors.log
+	CustomLog ${APACHE_LOG_DIR}/sitePHP_access.log combined
+
+	<Directory /var/www/sitePHP>
+		Require all granted
+		AllowOverride all
+	</Directory>	
+
+</VirtualHost>
+
diff --git a/TP3_02.10.20/ansible/sitePHPDocker/detruire_containers_et_images.sh b/TP3_02.10.20/ansible/sitePHPDocker/detruire_containers_et_images.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2a09291a88221d50cefb2ca1f2c849238d18ce64
--- /dev/null
+++ b/TP3_02.10.20/ansible/sitePHPDocker/detruire_containers_et_images.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+docker stop $(docker ps -aq)
+docker rm $(docker ps -aq)
+docker image rm imgsitephp imgsitephpdb
+#echo $(docker image ls)
diff --git a/TP3_02.10.20/siteHTML_IPL/.~lock.Docker solution.docx# b/TP3_02.10.20/siteHTML_IPL/.~lock.Docker solution.docx#
new file mode 100644
index 0000000000000000000000000000000000000000..dee86383607c08d033c623d9e8abb5d07691b734
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/.~lock.Docker solution.docx#	
@@ -0,0 +1 @@
+,michiels,a11p6.fil.univ-lille1.fr,16.10.2020 11:05,file:///home/m1io/michiels/.config/libreoffice/4;
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/Docker solution.docx b/TP3_02.10.20/siteHTML_IPL/Docker solution.docx
new file mode 100644
index 0000000000000000000000000000000000000000..108a19e40e9cebf0160b8cb2aabd5734fc767d42
Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/Docker solution.docx differ
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/Explications et commandes.txt b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/Explications et commandes.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5d006ced7061b92fc27912ebecb3153518bbddde
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/Explications et commandes.txt	
@@ -0,0 +1,48 @@
+DEMO 
+
+PUTTY - Permet le copier/coller de commandes 
+PUTTY - �l�ments int�ressants
+Keyboard -> ctrl-H (gestion de la touche backspace)
+Features -> disable keypad (gestion pav� num�rique)
+Fonts -> taille 18
+Connection -> Data -> Autologin -> root
+SSH -> Auth -> cl� priv�e
+
+INSTANTANES
+Revenir � un �tat ant�rieur
+
+INSTALLATION DOCKER 
+copier/coller depuis syllabus
+
+WinSCP -> copie de fichier via SSH (idem que putty les param�tres peuvent �tre sauv�s).
+
+EXPLICATIONS DOCKERFILE 
+contdbphp -> mysql -> docker hub -> voir environnement variables + fresh instance
+contsitephp -> php -> docker hub -> add extensions + search apache
+
+
+
+Dans le r�pertoire sitePHPDocker : 
+# cr�ation image site php code
+docker build -t imgsitephp contsitephp/.
+# cr�ation image site php db
+docker build -t imgsitephpdb contdbphp/.
+# cr�ation du conteneur avec la DB
+docker run -d --name contsitephpdb imgsitephpdb 
+# cr�ation du conteneur sitephp
+docker run -d -p 80:80 --name contsitephp imgsitephp
+# A ce stade 
+#-> lynx localhost affiche le site php mais erreur dans le menu "Livres" car connexion � la DB
+# Erreur :  Name or service not know -> erreur r�seau
+# connecter les conteneurs -> les placer dans un m�me r�seau
+# cr�ation de notre r�seau
+docker network create sitephpnet 
+# connecter le premier conteneur
+docker network connect sitephpnet contsitephp
+# connecter le deuxi�me conteneur
+docker network connect sitephpnet contsitephpdb
+
+# A noter 
+Le fichier Db.class.php contient la connexion vers la DB et doit �tre �ventuellement adapt�.
+Il doit contenir le nom du conteneur -> docker utilisera le nom du conteneur au niveau r�seau
+Le mot de passe pour la DB dans ce fichier doit �tre le m�me que celui pr�cis� dans le Dockerfile du conteneur DB
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..fa354763927cb2bd00a03be13ed6866a67d580eb
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile
@@ -0,0 +1,5 @@
+FROM mysql
+MAINTAINER Olivier Choquet
+ENV MYSQL_DATABASE=bdbn
+ENV MYSQL_ROOT_PASSWORD=ipl
+COPY bdbn.sql /docker-entrypoint-initdb.d
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile~ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile~
new file mode 100644
index 0000000000000000000000000000000000000000..b86e213320de8c8c8bd16d107d1408d6e6c7ddd0
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile~
@@ -0,0 +1,7 @@
+FROM mysql
+MAINTAINER Olivier Choquet
+ENV MYSQL_DATABASE=bdbn
+ENV MYSQL_ROOT_PASSWORD=ipl
+# la DB sera créée à l'intérieur du conteneur via 
+# mysql -u root -p < bdbn.sql
+COPY bdbn.sql /root/bdbn.sql
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/bdbn.sql b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/bdbn.sql
new file mode 100644
index 0000000000000000000000000000000000000000..30b41ef798c1df015915259d13f5e681196b1967
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/bdbn.sql
@@ -0,0 +1,66 @@
+-- phpMyAdmin SQL Dump
+-- version 4.6.4
+-- https://www.phpmyadmin.net/
+--
+-- Client :  127.0.0.1
+-- Généré le :  Mar 18 Juillet 2017 à 10:20
+-- Version du serveur :  5.7.14
+-- Version de PHP :  5.6.25
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Base de données :  `bdbn`
+--
+CREATE DATABASE IF NOT EXISTS `bdbn` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
+USE `bdbn`;
+
+-- --------------------------------------------------------
+
+--
+-- Structure de la table `livres`
+--
+
+DROP TABLE IF EXISTS `livres`;
+CREATE TABLE `livres` (
+  `no` int(11) NOT NULL,
+  `titre` varchar(255) NOT NULL,
+  `auteur` varchar(255) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Contenu de la table `livres`
+--
+
+INSERT INTO `livres` (`no`, `titre`, `auteur`) VALUES
+(1, 'test', 'test');
+
+--
+-- Index pour les tables exportées
+--
+
+--
+-- Index pour la table `livres`
+--
+ALTER TABLE `livres`
+  ADD PRIMARY KEY (`no`);
+
+--
+-- AUTO_INCREMENT pour les tables exportées
+--
+
+--
+-- AUTO_INCREMENT pour la table `livres`
+--
+ALTER TABLE `livres`
+  MODIFY `no` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Db.class.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Db.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ce1eed4036442625444dfb7382dde2035fe90dc
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Db.class.php
@@ -0,0 +1,48 @@
+<?php
+class Db
+{
+    private static $instance = null;
+    private $_db;
+
+    private function __construct()
+    {
+        try {
+            $this->_db = new PDO('mysql:host=contsitephpdb;dbname=bdbn', 'root', 'ipl');
+            $this->_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
+			$this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
+        } 
+		catch (PDOException $e) {
+		    die('Erreur de connexion à la base de données : '.$e->getMessage());
+        }
+    }
+
+	# Pattern Singleton
+    public static function getInstance()
+    {
+        if (is_null(self::$instance)) {
+            self::$instance = new Db();
+        }
+        return self::$instance;
+    }
+
+	# Fonction qui exécute un SELECT dans la table des livres 
+	# et qui renvoie un tableau d'objet(s) de la classe Livre
+	public function select_livres() {
+		# Définition du query
+		$query = 'SELECT * FROM livres ORDER BY no DESC';
+		
+		# Exécution du query
+		$result = $this->_db->query($query); 
+
+		# Parcours de l'ensemble des résultats et construction d'un tableau d'objet(s) de la classe Livre
+		$tableau = array();
+		if ($result->rowcount()!=0) {
+			while ($row = $result->fetch()) {		
+				$tableau[] = new Livre($row->no,$row->titre,$row->auteur);
+			}
+		}	
+		# pour debug : affichage ici possible de l'array à l'aide de var_dump($tableau);
+		# var_dump($tableau);
+		return $tableau;
+	}	
+}
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Dockerfile b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..ef99d5bba868a90b30763950ac1955ab335a2c29
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Dockerfile
@@ -0,0 +1,11 @@
+FROM php:7.2.8-apache-stretch
+RUN docker-php-ext-install pdo_mysql
+MAINTAINER Olivier Choquet
+EXPOSE 80
+COPY sitePHP.conf /etc/apache2/sites-available/000-default.conf
+COPY siteBonneNouvelles /var/www/sitePHP
+# modifier éventuellement le nom du conteneur et mdp de passe dans Db.class.php
+# docker utilisera au niveau réseau le nom du conteneur pour atteindre le conteneur de la DB
+COPY Db.class.php /var/www/sitePHP/models/Db.class.php
+CMD apache2ctl -D FOREGROUND
+
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php
new file mode 100644
index 0000000000000000000000000000000000000000..727b78a075c2b68a7603a34b75539edefb1c23f5
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php
@@ -0,0 +1,14 @@
+<?php 
+class AccueilController{
+	
+	public function __construct() {
+
+	}
+			
+	public function run(){	
+		
+		# Un contrôleur se termine en écrivant une vue
+		require_once(CHEMIN_VUES . 'accueil.php');
+	}
+	
+}
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php
new file mode 100644
index 0000000000000000000000000000000000000000..75c9865bdf2d5c6138e390837130e121430a75d8
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php
@@ -0,0 +1,37 @@
+<?php 
+class ContactController{
+
+	public function __construct() {
+
+	}
+			
+	public function run(){	
+		
+		# Envoi d'un email sur base des informations du formulaire transmises par la méthode POST
+		$notification='';
+		if (!empty($_POST)) {
+			
+			if (empty($_POST['email']) && empty($_POST['message'])) {
+				$notification='Entrez un email et un message non vides!';
+			} elseif (empty($_POST['email'])) {
+				$notification='Entrez un email non vide!';
+			} elseif (empty($_POST['message'])) {
+				$notification='Entrez un message non vide!';
+			} else {			
+				$to      = 'webmaster@votresite';
+				$subject = 'Test du site des bonnes nouvelles';
+				$message = $_POST['message'];
+				$headers = 'From: ' . $_POST['email'];
+
+				if (mail($to, $subject, $message, $headers)) {
+					$notification='Vos informations ont été transmises avec succès.';
+				} else {
+					$notification='Vos informations n\'ont pas été transmises.';
+				}
+			}
+		}
+		
+		# Ecrire ici la vue
+		require_once(CHEMIN_VUES . 'contact.php');
+	}
+} 
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php
new file mode 100644
index 0000000000000000000000000000000000000000..b0468bb0347d93415de180ce766e3672f9b39a4b
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php
@@ -0,0 +1,25 @@
+<?php 
+class GeneseController{
+
+	public function __construct() {
+
+	}
+			
+	public function run(){	
+
+		# Tableau de l'évolution du cours de PHP à l'IPL
+		$cphp[2009] = 'PHP structuré en modules avec accès à SQLite comme base de données';
+		$cphp[2010] = 'PHP structuré en modules avec accès à MySQL comme base de données';
+		$cphp[2011] = 'PHP structuré en modules avec PDO OO accédant à MySQL comme base de données';
+		$cphp[2012] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données';
+		$cphp[2013] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données';
+		$cphp[2014] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données';
+		$cphp[2015] = 'PHP OO structuré en MVC avec PDO OO accédant à MySql comme base de données';
+
+		# Un contrôleur se termine en écrivant une vue
+		require_once(CHEMIN_VUES . 'genese.php');
+	}
+	
+	
+
+} 
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php
new file mode 100644
index 0000000000000000000000000000000000000000..294360fe503d356682c1492369435a4c9ea474fe
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php
@@ -0,0 +1,20 @@
+<?php 
+class LivresController{
+
+	public function __construct() {
+	
+	}
+			
+	public function run(){	
+		
+		# Variable HTML dans la vue
+		$tablivres='';
+		
+		# Sélection de tous les livres sous forme de tableau
+		$tablivres=Db::getInstance()->select_livres();
+		
+		# Ecrire ici la vue
+		# $tablivres contient un tableau d'objets de la classe Livre
+		require_once(CHEMIN_VUES . 'livres.php');
+	}
+} 
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3a54d3de9ec34547189b681a860c333471c6db4
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php
@@ -0,0 +1,49 @@
+<?php
+	# Prise du temps actuel au début du script
+	$time_start = microtime(true);
+
+	# Variables globales du site
+	define('CHEMIN_VUES','views/');
+    define('EMAIL','jeanluc.collinet@ipl.be');
+	$date = date("j/m/Y");
+	
+	# Require des classes automatisé
+	function chargerClasse($classe) {
+		require 'models/' . $classe . '.class.php';
+	}
+	spl_autoload_register('chargerClasse'); 
+
+	# Ecrire ici le header de toutes pages HTML
+	require_once(CHEMIN_VUES . 'header.php');
+	
+	# Ecrire ici le menu du site de toutes pages HTML
+	require_once(CHEMIN_VUES . 'menu.php');
+
+	# Tester si une variable GET 'action' est précisée dans l'URL index.php?action=...
+	$action = (isset($_GET['action'])) ? htmlentities($_GET['action']) : 'default';
+	# Quelle action est demandée ?
+	switch($action) {
+		case 'genese':
+			require_once('controllers/GeneseController.php');	
+			$controller = new GeneseController();
+			break;
+		case 'livres':
+			require_once('controllers/LivresController.php');	
+			$controller = new LivresController();
+			break;
+		case 'contact':
+			require_once('controllers/ContactController.php');	
+			$controller = new ContactController();
+			break;	
+		default: # Par défaut, le contrôleur de l'accueil est sélectionné
+			require_once('controllers/AccueilController.php');	
+			$controller = new AccueilController();
+			break;
+	}
+	# Exécution du contrôleur correspondant à l'action demandée
+	$controller->run();
+	
+	# Ecrire ici le footer du site de toutes pages HTML
+	require_once(CHEMIN_VUES . 'footer.php');
+
+?>
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ce1eed4036442625444dfb7382dde2035fe90dc
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php
@@ -0,0 +1,48 @@
+<?php
+class Db
+{
+    private static $instance = null;
+    private $_db;
+
+    private function __construct()
+    {
+        try {
+            $this->_db = new PDO('mysql:host=contsitephpdb;dbname=bdbn', 'root', 'ipl');
+            $this->_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
+			$this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
+        } 
+		catch (PDOException $e) {
+		    die('Erreur de connexion à la base de données : '.$e->getMessage());
+        }
+    }
+
+	# Pattern Singleton
+    public static function getInstance()
+    {
+        if (is_null(self::$instance)) {
+            self::$instance = new Db();
+        }
+        return self::$instance;
+    }
+
+	# Fonction qui exécute un SELECT dans la table des livres 
+	# et qui renvoie un tableau d'objet(s) de la classe Livre
+	public function select_livres() {
+		# Définition du query
+		$query = 'SELECT * FROM livres ORDER BY no DESC';
+		
+		# Exécution du query
+		$result = $this->_db->query($query); 
+
+		# Parcours de l'ensemble des résultats et construction d'un tableau d'objet(s) de la classe Livre
+		$tableau = array();
+		if ($result->rowcount()!=0) {
+			while ($row = $result->fetch()) {		
+				$tableau[] = new Livre($row->no,$row->titre,$row->auteur);
+			}
+		}	
+		# pour debug : affichage ici possible de l'array à l'aide de var_dump($tableau);
+		# var_dump($tableau);
+		return $tableau;
+	}	
+}
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ef941396e826df09eb38ee99e2726c8d563c404
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php
@@ -0,0 +1,25 @@
+<?php
+class Livre{
+	private $_no;
+	private $_titre;
+	private $_auteur;
+	
+	public function __construct($no,$titre, $auteur){
+		$this->_no = $no;
+		$this->_titre = $titre;
+		$this->_auteur = $auteur;
+	}
+	
+	public function no(){
+		return $this->_no;		
+	}	
+		
+	public function titre(){
+		return $this->_titre;
+	}
+	
+	public function auteur(){
+		return $this->_auteur;
+	}
+}
+?>
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ca8b6bc60cdf6dfff46ca53632ee9602690ff39
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php
@@ -0,0 +1,5 @@
+<div id="contenu">
+	<h2>Accueil</h2>
+	<p>Bienvenue aux séances d'exercices consacrées à élaborer un site Internet en PHP selon une architecture didactique MVC OO.</p>
+	<p>Jean-Luc Collinet.</p>
+</div><!-- #contenu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d16ad739146e9cdd0b3bbd1b0d107774ec38254
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php
@@ -0,0 +1,13 @@
+<div id="contenu">
+	<h2>Contactez-nous</h2>
+	<p>Bienvenue sur la page de contact.</p>
+	<p>Cette page est demandée grâce à la valeur 'contact' du paramètre 'action' passé par la méthode GET, visible dans l'URL /index.php?action=contact.</p>
+	<div id="notification"><?php echo $notification ?></div>
+	<div class="formulaire">
+		<form action="index.php?action=contact" method="post">
+		<p>Votre email : <input type="text" name="email" /></p>
+		<p><textarea rows="3" name="message">Entrez votre message ici</textarea></p>
+		<p><input type="submit" name="form_contact" value="Envoyer"></p>
+		</form>
+	</div>
+</div><!-- #contenu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css
new file mode 100644
index 0000000000000000000000000000000000000000..7dcf24082821d9eba565dd154f137bceac4e2118
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css
@@ -0,0 +1,184 @@
+/* ==============================================
+   FEUILLE DE STYLES DES GABARITS HTML/CSS
+   � Elephorm & Alsacreations.com
+   Conditions d'utilisation:
+   http://creativecommons.org/licenses/by/2.0/fr/
+   ============================================== */
+
+
+/* --- STYLES DE BASE POUR LE TEXTE ET LES PRINCIPAUX �L�MENTS --- */
+
+/* Page */
+html {
+	font-size: 100%; /* Voir -> Note 1 � la fin de la feuille de styles. */
+}
+body {
+	margin: 10;
+	padding: 10px 20px; /* Note -> 2 */
+	font-family: Verdana, "Bitstream Vera Sans", "Lucida Grande", sans-serif; /* 3 */
+	font-size: .8em; /* -> 4 */
+	line-height: 1.25; /* -> 5 */
+	color: black;
+	background: white;
+}
+
+/* Titres */
+h1, h2, h3, h4, h5, h6 {
+	margin: 1em 0 .5em 0; /* -> 6 */
+}
+h1, h2 {
+	font-family: Georgia, "Bitstream Vera Serif", Norasi, serif;
+	font-weight: normal; /* -> 7 */
+}
+h1 {
+	font-size: 3em; /* -> 8 */
+	font-style: italic;
+}
+h2 {font-size: 1.8em;}
+h3 {font-size: 1.2em;}
+h4 {font-size: 1em;}
+
+/* Listes */
+ul, ol {
+	margin: .75em 0 .75em 24px;
+	padding: 0; /* -> 9 */
+}
+ul {
+	list-style: square;
+}
+li {
+	margin: 0;
+	padding: 0;
+}
+
+/* Paragraphes */
+p {
+	margin: .75em 0;
+}
+li p, blockquote p {
+	margin: .5em 0;
+}
+
+/* Citations */
+blockquote, q {
+	font-size: 1.1em;
+	font-style: italic;
+	font-family: Georgia, "Bitstream Vera Serif", Norasi, serif;
+}
+blockquote {
+	margin: .75em 0 .75em 24px;
+}
+cite {
+	font-style: italic;
+}
+
+/* Liens */
+a {
+	color: mediumblue;
+	text-decoration: underline;
+}
+a:hover, a:focus {
+	color: crimson;
+}
+a img {
+	border: none; /* -> 10 */
+}
+
+/* Divers �l�ments de type en-ligne */
+em {
+	font-style: italic;
+}
+strong {
+	font-weight: bold;
+	color: dimgray;
+}
+
+
+/* --- STYLES POUR CERTAINS CONTENUS DES GABARITS --- */
+
+pre, code {
+	font-size: 100%;
+	font-family: "Bitstream Vera Mono", "Lucida Console", "Courier New", monospace;
+}
+pre {
+	width: 90%;
+	overflow: auto;
+	overflow-y: hidden;
+	margin: .75em 0;
+	padding: 12px;
+	background: #eee;
+	color: #555;
+}
+pre strong {
+	font-weight: normal;
+	color: black;
+}
+#copyright {
+	margin: 20px 0 5px 0;
+	text-align: right;
+	font-size: .8em;
+	color: #848F63;
+}
+#copyright a {
+	color: #848F63;
+	text-decoration: none;
+}
+#copyright a:hover, #copyright a:focus {
+	text-decoration: underline;
+}
+
+
+/* --- NOTES ---
+
+1.	Ce "font-size: 100%" est normalement inutile. On l'utilise uniquement
+	pour �viter un bug de redimensionnement du texte dans Internet Explorer.
+
+2.	Par d�faut, les navigateurs ont un padding (ou, pour certains, un
+	margin) de 6px pour l'�l�ment BODY. C'est ce qui �vite que le texte
+	ne soit compl�tement coll� aux bords de la zone de visualisation du
+	navigateur lorsqu'on affiche une page �brute�, sans mise en forme.
+	Mais ce retrait de 6px est un peu faiblard: on le renforce donc.
+	Notez bien que les feuilles de styles des gabarits pourront augmenter
+	ce retrait, ou bien l'annuler.
+	
+3.	Voici quelques exemples de collections coh�rentes de fontes (propri�t�
+	CSS "font-family"):
+	font-family: Arial, Helvetica, "Nimbus Sans L", sans-serif;
+	font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+	font-family: Georgia, "Bitstream Vera Serif", Norasi, serif;
+	font-family: "Times New Roman", Times, "Nimbus Roman No9 L", serif;
+		
+4.	Taille du texte de base de la page. D�pend de la taille du texte par
+	d�faut du navigateur (souvent 16px), et des r�glages de l'utilisateur.
+	� adapter en fonction de la fonte choisie, et du rendu souhait�.
+	En g�n�ral, on utilisera une valeur de base entre .65em et 1em
+	(ou 65% et 100%).
+
+5.	Hauteur de ligne. � adapter en fonction de la fonte choisie, et des
+	besoins particuliers (lignes de texte longues ou courtes, titre ou
+	corps de texte...).
+
+6.	En g�n�ral, les styles par d�faut des navigateurs font que les marges
+	en haut et en bas des titres sont �quivalentes. Ici, en diminuant la
+	marge du bas, on cherche � rapprocher le titre du contenu qu'il introduit.
+
+7.	Les styles par d�faut des navigateurs mettent les titres en gras.
+	Si on souhaite passer � des caract�res �normaux�, on doit utiliser
+	font-size: normal.
+
+8.	Pour un �l�ment en "font-size: 3em", la taille du texte sera le triple de
+	la taille du texte de l'�l�ment parent.
+	� noter: on aurait pu �crire "font-size: 300%" pour le m�me r�sultat.
+
+9.	Par d�faut, les listes UL et OL ont un retrait � gauche qui peut �tre,
+	suivant les navigateurs:
+	- un padding-left de 40px;
+	- ou bien un margin-left de 40px.
+	On met tout le monde d'accord avec une marge � gauche de 24px, et pas
+	de padding.
+
+10.	Les navigateurs donnent souvent aux images plac�es dans des liens
+	une bordure disgracieuse. On annule ce style souvent g�nant en appliquant
+	un "border: none" aux images qui se trouvent � l'int�rieur d'un lien.
+
+*/
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css
new file mode 100644
index 0000000000000000000000000000000000000000..6de9fd7b93340b12e47af2719414536f4e652a42
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css
@@ -0,0 +1,191 @@
+/* ==============================================
+   FEUILLE DE STYLES DES GABARITS HTML/CSS --- 01
+   � Elephorm & Alsacreations.com
+   Conditions d'utilisation:
+   http://creativecommons.org/licenses/by/2.0/fr/
+   ============================================== */
+
+
+/* --- COULEURS --- */
+
+/* Note: vous pouvez modifier simplement l'aspect de ce gabarit en modifiant
+   uniquement les couleurs de fond (propri�t�s background) et les couleurs
+   du texte (propri�t� color).
+   Pour modifier la disposition des blocs, voir plus bas dans la feuille de
+   styles la partie �positionnement�. */
+
+/* G�n�ral */
+body {
+	color: #F0E39E;
+	background: #181A12; /* Voir -> Note 1 ci-dessous */
+}
+a {
+	color: #FF6533;
+}
+a:hover, a:focus {
+	color: #FF4C00;
+}
+strong {
+	color: #A1B55D;
+}
+
+/* En-t�te */
+#entete {
+	background: #181A12;
+}
+
+/* Navigation #181A12; */
+#navigation {
+	background: #000000;
+}
+#navigation a {
+	color: #FF6533;
+}
+#navigation a:hover, #navigation a:focus {
+	background: #000000;
+}
+
+/* Contenu principal */
+#contenu {
+	color: #363B29;
+	background: #cbd888;
+}
+#contenu a {
+	color: #332510;
+}
+#contenu a:hover, #contenu a:focus {
+	color: #6E5122;
+}
+#contenu strong {
+	color: #181A12;
+}
+
+/* Pied de page */
+#pied {
+	color: #E6A948;
+}
+
+/* Formulaire */
+.formulaire {
+	padding: 12px 12px;
+	background: #cbdd88;
+}
+
+/* Notification */
+#notification {
+	color: #582758;
+}
+
+
+/* --- POSITIONNEMENT --- */
+
+/* Page */
+body {
+	padding: 0; /* -> 2 */
+}
+
+/* En-t�te */
+#entete {
+	padding: 15px 20px 10px 20px;
+}
+#entete h1 {
+	margin: 0;
+}
+#entete h1 img {
+	float: left;
+	margin: 7px 20px 10px 0;
+}
+#entete .sous-titre {
+	margin: 4px 0 15px 0;
+}
+
+/* Menu de navigation */
+#navigation {
+	padding: 12px 15px;
+}
+#navigation ul {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+}
+#navigation li {
+	display: inline; /* -> 3 */
+}
+#navigation a {
+	padding: 6px;
+	line-height: 1.5;
+	font-size: .9em;
+	text-decoration: none;
+}
+
+/* Contenu */
+#contenu {
+	padding: 10px 20px;
+}
+#contenu > :first-child {
+	margin-top: 10px;
+}
+#contenu p, #contenu li {
+	line-height: 1.5;
+}
+
+/* Pied de page */
+#pied {
+	padding: 15px 20px;
+	font-size: .85em;
+}
+#pied p {
+	margin: .5em 0;
+}
+#pied #copyright {
+	float: right;
+	margin: .5em 0 30px 10%;
+	font-size: 1em;
+}
+
+/* Tableau repris du cours d'HTML */
+.html {
+	font-family: "Bitstream Vera Mono", "Lucida Console", "Courier New",
+		monospace;
+	font-size: larger;
+	color: purple;
+}
+
+#tableBalises th{
+	border-style: solid;
+	border-width: thin;
+	border-collapse: collapse;
+	background-color: #DCDCDC;
+}
+#tableBalises td{
+	border-style: solid;
+	border-width: thin;
+	border-collapse: collapse;
+}
+
+/* --- NOTES ---
+
+1.	Notes que cette couleur de fond n'est apparente qu'en bas de page. Plus
+	haut, elle est masque: par la couleur de fond de l'en-t�te, puis par la
+	couleur de fond du menu, puis par la couleur de fond du contenu. Seul le
+	pied de page laisse apparaitre cette couleur de fond.
+
+2.	Pour ce gabarit, on supprime l'�cart entre les �bords� du navigateur et
+	le contenu, en passant le padding de l'�l�ment BODY � z�ro.
+	(Voir �galement la note num�ro 2 dans base.css.)
+
+3.	Si les �l�ments de notre menu se placent horizontalement plut�t que les
+	uns en dessous des autres, c'est parce qu'ils ne sont plus affich�s
+	comme des blocs (ce qui est normalement le cas des �l�ments LI), mais
+	comme des �l�ments de type en-ligne. On obtient ce comportement avec la
+	propri�t� "display" et la valeur "inline".
+	Le fait que nos LI se comportent comme un flot unique de texte aura deux
+	cons�quences:
+	- on va pouvoir aligner le texte du menu � gauche (c'est le cas ici), �
+	  droite ou encore au centre, en jouant sur la propri�t� "text-align" du
+	  menu (sur l'�l�ment UL ou sur div#navigation);
+	- certains styles ne pourront pas �tre appliqu�s... par exemple, la
+	  propri�t� "width" ne peut pas �tre utilis�e pour les �l�ments en
+	  "display: inline".
+
+*/
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..764891369b5f6f9275c14ac6453e03a1dc997cce
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php
@@ -0,0 +1,14 @@
+		<div id="pied">
+			<strong>Excellente journée qu'aujourd'hui le <?php echo $date ?></strong> :: 
+			<?php $time_end = microtime(true);
+				  $time = number_format(($time_end - $time_start)*1000,6);
+				  echo $time; ?>ms pour exécuter le script PHP :: 
+			<!-- ! adresse email non cryptée : spam possible -->
+	        <a href="mailto:<?php echo EMAIL ?>"><?php echo EMAIL ?></a>
+			<p id="copyright">Mise en page d'après
+				<a href="http://www.alsacreations.com/tutoriels/">Alsacréations</a>
+			</p>
+		</div><!-- #pied -->
+	</div><!-- #global -->
+	</body>
+</html>
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php
new file mode 100644
index 0000000000000000000000000000000000000000..ca12db254feb28fee2a905c7d2b66f9107fab277
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php
@@ -0,0 +1,22 @@
+<div id="contenu">
+	<h2>La Genèse</h2>
+	<p>Bienvenue sur la page de la genèse.</p>
+	<p>Cette page est demandée grâce à la valeur 'genese' du paramètre 'action' passé par la méthode GET, visible dans l'URL /index.php?action=genese.</p>
+	<table id="tableBalises">
+		<thead>
+			<tr>
+				<th>Année</th>
+				<th>Cours</th>
+			</tr>
+		</thead>
+		<tbody>
+		<?php foreach ($cphp as $annee => $cours) { ?>
+			<tr>
+			<td><span class="html"><?php echo $annee ?></span></td>
+			<td><?php echo $cours ?></td>		
+			</tr>
+		<?php } ?>
+		</tbody>
+	</table>
+	<img src="<?php echo CHEMIN_VUES ?>images/big-w3cvalidtemplate.png" alt="W3C Valid" >
+</div><!-- #contenu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php
new file mode 100644
index 0000000000000000000000000000000000000000..7fad9c5c4f813df676d56e6a03948359c07b1f76
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="fr">
+	<head>
+		<meta charset="utf-8" >
+		<title>Un site de Bonnes Nouvelles</title>
+		<link rel="stylesheet" type="text/css" href="views/css/base.css" media="all" >
+		<link rel="stylesheet" type="text/css" href="views/css/modele01.css" media="screen" >
+	</head>
+	<body>
+	<div id="global">
+		<div id="entete">
+			<h1>
+				<a href="index.php">
+				<img src="views/images/smiley.jpg" alt="Sourire">
+				</a>
+				Un site de Bonnes Nouvelles
+			</h1>
+			<p class="sous-titre">
+				<strong>Institut Paul Lambin</strong>
+				:: 1ère année du baccalauréat en informatique
+			</p>
+		</div><!-- entete -->
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png
new file mode 100644
index 0000000000000000000000000000000000000000..091f757258f968217eda8d7c5ba6a2c2ec142e12
Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png differ
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..76367dd5a1c1c1995c1b56c6d2a72b58bd335ddd
Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg differ
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php
new file mode 100644
index 0000000000000000000000000000000000000000..a0306f283d8d2bc9c6b8fbe8fa65e688d2160ef7
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php
@@ -0,0 +1,20 @@
+<div id="contenu">
+	<h2>Les Livres</h2>
+	<p>Bienvenue sur la page des livres.</p>
+	<table id="tableBalises">
+		<thead>
+			<tr>
+				<th>Titre</th>
+				<th>Auteur</th>
+			</tr>
+		</thead>
+		<tbody>
+		<?php for ($i=0;$i<count($tablivres);$i++) { ?>
+			<tr>
+			<td><span class="html"><?php echo $tablivres[$i]->titre() ?></span></td>
+			<td><?php echo $tablivres[$i]->auteur() ?></td>		
+			</tr>
+		<?php } ?>
+		</tbody>
+	</table>
+</div><!-- #contenu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d13787a32342a2c8163c4e4c8c71a78ab430c88
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php
@@ -0,0 +1,7 @@
+<div id="navigation">
+	<ul>
+		<li><a href="index.php?action=genese">La genèse</a></li>
+		<li><a href="index.php?action=livres">Les livres</a></li>
+		<li><a href="index.php?action=contact">Contactez-nous</a></li>		
+	</ul>
+</div><!-- menu -->
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/sitePHP.conf b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/sitePHP.conf
new file mode 100644
index 0000000000000000000000000000000000000000..4464e6aad74e9f11c6e5746e22596bd8ee1961fc
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/sitePHP.conf
@@ -0,0 +1,17 @@
+<VirtualHost *:80>
+	# pas de servername -> site par défaut
+	#ServerName sitePHP
+
+	ServerAdmin webmaster@localhost
+	DocumentRoot /var/www/sitePHP
+
+	ErrorLog ${APACHE_LOG_DIR}/sitePHP_errors.log
+	CustomLog ${APACHE_LOG_DIR}/sitePHP_access.log combined
+
+	<Directory /var/www/sitePHP>
+		Require all granted
+		AllowOverride all
+	</Directory>	
+
+</VirtualHost>
+
diff --git a/TP3_02.10.20/siteHTML_IPL/solutions/Dockerfile b/TP3_02.10.20/siteHTML_IPL/solutions/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..386b26d7b591254051c42f99b792901fc93584d1
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/solutions/Dockerfile
@@ -0,0 +1,12 @@
+FROM debian
+MAINTAINER Olivier Choquet
+RUN apt-get update && apt-get upgrade -y
+RUN apt-get install apache2 -y
+COPY siteHTML.conf /etc/apache2/sites-available/000-default.conf
+COPY ./siteHTML /var/www/siteHTML
+#RUN a2ensite siteHTML
+#RUN echo "127.0.0.1	siteHTML" >> /etc/hosts
+EXPOSE 80
+CMD apachectl -D FOREGROUND
+# apache fonctionne en background -> container exited
+#CMD service apache2 restart
diff --git a/TP3_02.10.20/siteHTML_IPL/solutions/siteHTML.conf b/TP3_02.10.20/siteHTML_IPL/solutions/siteHTML.conf
new file mode 100644
index 0000000000000000000000000000000000000000..1b69b13a9f0eb17aa3ce353d1213e31d29113e7f
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/solutions/siteHTML.conf
@@ -0,0 +1,17 @@
+<VirtualHost *:80>
+	# pas de servername -> site par défaut
+	#ServerName siteHTML 
+
+	ServerAdmin webmaster@localhost
+	DocumentRoot /var/www/siteHTML
+
+	ErrorLog ${APACHE_LOG_DIR}/siteHTML_errors.log
+	CustomLog ${APACHE_LOG_DIR}/siteHTML_access.log combined
+
+	<Directory /var/www/siteHTML>
+		Require all granted
+		AllowOverride all
+	</Directory>	
+
+</VirtualHost>
+
diff --git a/TP3_02.10.20/siteHTML_IPL/solutions/siteHTMLDocker.zip b/TP3_02.10.20/siteHTML_IPL/solutions/siteHTMLDocker.zip
new file mode 100644
index 0000000000000000000000000000000000000000..044520eed595425dda93cff79f82bd28eddb1d39
Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/solutions/siteHTMLDocker.zip differ
diff --git a/TP3_02.10.20/siteHTML_IPL/solutions/sitePHPDocker.zip b/TP3_02.10.20/siteHTML_IPL/solutions/sitePHPDocker.zip
new file mode 100644
index 0000000000000000000000000000000000000000..407fb493bc73fb4f0c1ecd790d8ff03234d582e8
Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/solutions/sitePHPDocker.zip differ
diff --git a/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/Dockerfile b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..4e6b2ab491301d0eb28b21bb6f5e65f40104e7fb
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/Dockerfile	
@@ -0,0 +1,12 @@
+FROM debian
+MAINTAINER Pierre Michiels
+RUN apt-get update && apt-get upgrade -y
+RUN apt-get install apache2 -y
+COPY siteHTML.conf /etc/apache2/sites-available/000-default.conf
+COPY ./siteHTML /var/www/siteHTML
+#RUN a2ensite siteHTML
+#RUN echo "127.0.0.1	siteHTML" >> /etc/hosts
+EXPOSE 80
+CMD apachectl -D FOREGROUND
+#apache fonctionne en background -> container exited
+#CMD service apache2 restart
\ No newline at end of file
diff --git a/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.conf b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.conf
new file mode 100644
index 0000000000000000000000000000000000000000..79a026932d72b5bc5c771be18899a0c1d85ad199
--- /dev/null
+++ b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.conf	
@@ -0,0 +1,16 @@
+<VirtualHost *:80>
+	# pas de servername -> site par défaut
+	#ServerName siteHTML 
+
+	ServerAdmin webmaster@localhost
+	DocumentRoot /var/www/siteHTML
+
+	ErrorLog ${APACHE_LOG_DIR}/siteHTML_errors.log
+	CustomLog ${APACHE_LOG_DIR}/siteHTML_access.log combined
+
+	<Directory /var/www/siteHTML>
+		Require all granted
+		AllowOverride all
+	</Directory>	
+
+</VirtualHost>
diff --git a/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.zip b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.zip
new file mode 100644
index 0000000000000000000000000000000000000000..b6d397530882da88910f77dcb7e81323fc281592
Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.zip differ